当前位置: 首页 > 知识库问答 >
问题:

如何在R中将山地标准时间(MST)转换为山地日光时间(MDT)

仲孙雅达
2023-03-14

我正在尝试将datetime变量从MST转换为MDT。

我试图得到的是一个新变量datetime,它反映了山地夏时制(MDT)。

我不确定如何开始这个问题。

我正在考虑首先使用MST时区强制使用原始日期时间,然后将其转换为MDT,但是我不知道该怎么做。

更新:###############

经过一番挖掘,我发现原始datetime起源于UTC-07:00,这意味着它不反映夏令时。但是,我们需要我们的datetime来遵循夏令时。

容易看出时间变化的数据:

df <- structure(list(datetime.char = c("2019-03-09 21:00", "2019-03-09 21:05", 
"2019-03-09 21:10", "2019-03-09 21:15", "2019-03-09 21:20", "2019-03-09 21:25", 
"2019-03-09 21:30", "2019-03-09 21:35", "2019-03-09 21:40", "2019-03-09 21:45", 
"2019-03-09 21:50", "2019-03-09 21:55", "2019-03-09 22:00", "2019-03-09 22:05", 
"2019-03-09 22:10", "2019-03-09 22:15", "2019-03-09 22:20", "2019-03-09 22:25", 
"2019-03-09 22:30", "2019-03-09 22:35", "2019-03-09 22:40", "2019-03-09 22:45", 
"2019-03-09 22:50", "2019-03-09 22:55", "2019-03-09 23:00", "2019-03-09 23:05", 
"2019-03-09 23:10", "2019-03-09 23:15", "2019-03-09 23:20", "2019-03-09 23:25", 
"2019-03-09 23:30", "2019-03-09 23:35", "2019-03-09 23:40", "2019-03-09 23:45", 
"2019-03-09 23:50", "2019-03-09 23:55", "2019-03-10 00:00", "2019-03-10 00:05", 
"2019-03-10 00:10", "2019-03-10 00:15", "2019-03-10 00:20", "2019-03-10 00:25", 
"2019-03-10 00:30", "2019-03-10 00:35", "2019-03-10 00:40", "2019-03-10 00:45", 
"2019-03-10 00:50", "2019-03-10 00:55", "2019-03-10 01:00", "2019-03-10 01:05", 
"2019-03-10 01:10", "2019-03-10 01:15", "2019-03-10 01:20", "2019-03-10 01:25", 
"2019-03-10 01:30", "2019-03-10 01:35", "2019-03-10 01:40", "2019-03-10 01:45", 
"2019-03-10 01:50", "2019-03-10 01:55", "2019-03-10 02:00", "2019-03-10 02:05", 
"2019-03-10 02:10", "2019-03-10 02:15", "2019-03-10 02:20", "2019-03-10 02:25", 
"2019-03-10 02:30", "2019-03-10 02:35", "2019-03-10 02:40", "2019-03-10 02:45", 
"2019-03-10 02:50", "2019-03-10 02:55", "2019-03-10 03:00", "2019-03-10 03:05", 
"2019-03-10 03:10", "2019-03-10 03:15", "2019-03-10 03:20", "2019-03-10 03:25", 
"2019-03-10 03:30", "2019-03-10 03:35", "2019-03-10 03:40", "2019-03-10 03:45", 
"2019-03-10 03:50", "2019-03-10 03:55", "2019-03-10 04:00")), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -85L), spec = structure(list(
    cols = list(datetime.char = structure(list(), class = c("collector_character", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1), class = "col_spec"))

这是我们使用@d.b解决方案获得的结果的屏幕截图。但是,它并不完全提供预期的输出。

11月月份时钟更改

这是11月份的虚拟数据:

df <- structure(list(datetime.char = c("2017-11-04 21:00:00", "2017-11-04 21:05:00", 
"2017-11-04 21:10:00", "2017-11-04 21:15:00", "2017-11-04 21:20:00", 
"2017-11-04 21:25:00", "2017-11-04 21:30:00", "2017-11-04 21:35:00", 
"2017-11-04 21:40:00", "2017-11-04 21:45:00", "2017-11-04 21:50:00", 
"2017-11-04 21:55:00", "2017-11-04 22:00:00", "2017-11-04 22:05:00", 
"2017-11-04 22:10:00", "2017-11-04 22:15:00", "2017-11-04 22:20:00", 
"2017-11-04 22:25:00", "2017-11-04 22:30:00", "2017-11-04 22:35:00", 
"2017-11-04 22:40:00", "2017-11-04 22:45:00", "2017-11-04 22:50:00", 
"2017-11-04 22:55:00", "2017-11-04 23:00:00", "2017-11-04 23:05:00", 
"2017-11-04 23:10:00", "2017-11-04 23:15:00", "2017-11-04 23:20:00", 
"2017-11-04 23:25:00", "2017-11-04 23:30:00", "2017-11-04 23:35:00", 
"2017-11-04 23:40:00", "2017-11-04 23:45:00", "2017-11-04 23:50:00", 
"2017-11-04 23:55:00", "2017-11-05 00:00:00", "2017-11-05 00:05:00", 
"2017-11-05 00:10:00", "2017-11-05 00:15:00", "2017-11-05 00:20:00", 
"2017-11-05 00:25:00", "2017-11-05 00:30:00", "2017-11-05 00:35:00", 
"2017-11-05 00:40:00", "2017-11-05 00:45:00", "2017-11-05 00:50:00", 
"2017-11-05 00:55:00", "2017-11-05 01:00:00", "2017-11-05 01:00:00", 
"2017-11-05 01:05:00", "2017-11-05 01:05:00", "2017-11-05 01:10:00", 
"2017-11-05 01:10:00", "2017-11-05 01:15:00", "2017-11-05 01:15:00", 
"2017-11-05 01:20:00", "2017-11-05 01:20:00", "2017-11-05 01:25:00", 
"2017-11-05 01:25:00", "2017-11-05 01:30:00", "2017-11-05 01:30:00", 
"2017-11-05 01:35:00", "2017-11-05 01:35:00", "2017-11-05 01:40:00", 
"2017-11-05 01:40:00", "2017-11-05 01:45:00", "2017-11-05 01:45:00", 
"2017-11-05 01:50:00", "2017-11-05 01:50:00", "2017-11-05 01:55:00", 
"2017-11-05 01:55:00", "2017-11-05 02:00:00", "2017-11-05 02:05:00", 
"2017-11-05 02:10:00", "2017-11-05 02:15:00", "2017-11-05 02:20:00", 
"2017-11-05 02:25:00", "2017-11-05 02:30:00", "2017-11-05 02:35:00", 
"2017-11-05 02:40:00", "2017-11-05 02:45:00", "2017-11-05 02:50:00", 
"2017-11-05 02:55:00", "2017-11-05 03:00:00", "2017-11-05 03:05:00", 
"2017-11-05 03:10:00", "2017-11-05 03:15:00", "2017-11-05 03:20:00", 
"2017-11-05 03:25:00", "2017-11-05 03:30:00", "2017-11-05 03:35:00", 
"2017-11-05 03:40:00", "2017-11-05 03:45:00", "2017-11-05 03:50:00", 
"2017-11-05 03:55:00", "2017-11-05 04:00:00")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-97L))

有趣的是,当我进行三月转换时,有一个明显的警告消息,有12个条目无法解析。

df <- df %>% 
  mutate(datetime = ymd_hms(df$datetime.char, tz = "MST7MDT"))

在最终结果中,如果我打印df$date(请参阅注释中的@d.b代码),输出将保持MST/MDT tz,并在切换时可见:

[55] "2019-03-10 01:30:00 MST" "2019-03-10 01:35:00 MST" "2019-03-10 01:40:00 MST" "2019-03-10 01:45:00 MST" "2019-03-10 01:50:00 MST" "2019-03-10 01:55:00 MST"
[61] "2019-03-10 03:00:00 MDT" "2019-03-10 03:05:00 MDT" "2019-03-10 03:10:00 MDT" "2019-03-10 03:15:00 MDT" "2019-03-10 03:20:00 MDT" "2019-03-10 03:25:00 MDT"

这似乎不适用于11月的转换

共有1个答案

从智志
2023-03-14

任何时候都可以使用<code>的选项

library(anytime)
anytime("2018-03-12 02:03:12", tz = "MST7MDT")
 类似资料:
  • 问题内容: Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(“GMT”)); java.util.Date fromDate = cal.getTime(); System.out.println(fromDate); 上面的代码不在格林尼治标准时间打印日期,而是在本地时区打印。我如何从当前日期获得与格林尼治标准时间等效的日期(假设

  • 问题内容: 我有一个使用datetime.utcnow()创建并保存在数据库中的python datetime实例。 为了进行显示,我想使用默认的本地时区(例如,好像使用datetime.now()创建了datetime)将从数据库中检索到的datetime实例转换为本地datetime。 如何仅使用python标准库(例如,没有pytz依赖项)将UTC日期时间转换为本地日期时间? 似乎一种解决方

  • 问题内容: 从服务器上,我得到了这种格式的datetime变量:它是UTC时间。我想使用JavaScript将其转换为当前用户的浏览器时间。 如何使用JavaScript或jQuery完成此操作? 问题答案: 在将字符串转换为javascript中的日期之前,将’UTC’附加到字符串中:

  • 问题内容: 我有一个MySql数据库,该数据库为我插入的每个记录存储一个时间戳。我将该时间戳记作为字符串拖到我的Android应用程序中。我的数据库位于具有CST时区的服务器上。我想将该CST时间戳转换为Android设备的本地时间。 有人可以帮忙吗? 问题答案: 您不能简单地使用simpleDateFormat转换日期吗?然后只需定义输入日期的结构(df),然后将其转换为所需的格式(df): 是

  • 问题内容: 如何将时区感知日期时间对象转换为本地时区的等效非时区感知日期时间? 我的特定应用程序使用Django(尽管这实际上是一个通用的Python问题): .... 这导致Django抛出错误: 我需要的是: 什么会SOME_FUNCTION是什么? 问题答案: 通常,要将任意时区感知日期时间转换为原始(本地)日期时间,我将使用模块并将其转换为本地时间,并使日期时间变为原始状态: 但是由于你的

  • 问题内容: 我使用以下方式将UTC日期存储到数据库中: 然后我要将保存的UTC日期转换为客户的本地时间。 我怎样才能做到这一点? 谢谢 问题答案: 并且都使用服务器除非被覆盖本地时区; 您可以覆盖与一起使用的时区。