假设我给出了这个向量x
。我想把这些转换成"America/Detroit"
时区。
x <- c("2018-03-10 23:30:00", "2018-03-11 00:00:00", "2018-03-11 00:30:00", "2018-03-11 01:00:00",
"2018-03-11 01:30:00", "2018-03-11 02:00:00", "2018-03-11 02:30:00",
"2018-03-11 03:00:00",
"2018-03-11 03:30:00", "2018-03-11 04:00:00", "2018-03-11 04:30:00")
如果我如下使用ymd_hms()
,由于DST,我得到两个NA
。
ymd_hms(x, tz = "America/Detroit")
[1] "2018-03-10 23:30:00 EST" "2018-03-11 00:00:00 EST" "2018-03-11 00:30:00 EST"
[4] "2018-03-11 01:00:00 EST" "2018-03-11 01:30:00 EST" NA
[7] NA "2018-03-11 03:00:00 EDT" "2018-03-11 03:30:00 EDT"
[10] "2018-03-11 04:00:00 EDT" "2018-03-11 04:30:00 EDT"
Warning message:
2 failed to parse.
是否有一种方法将CCD_ 5格式化为日期时间;2018-03-11 02:00:00";向前滚动一个小时?最终日期时间应如下所示:
c("2018-03-10 23:30:00 EST", "2018-03-11 00:00:00 EST", "2018-03-11 00:30:00 EST", "2018-03-11 01:00:00 EST",
"2018-03-11 01:30:00 EST", "2018-03-11 03:00:00 EDT", "2018-03-11 03:30:00 EDT",
"2018-03-11 04:00:00 EDT", "2018-03-11 04:30:00 EDT", "2018-03-11 05:00:00 EDT", "2018-03-11 05:30:00 EDT")
如果我使用force_tz()
,它就不能满足我的要求。
force_tz(ymd_hms(x), tz="America/Detroit", roll = TRUE)
[1] "2018-03-10 23:30:00 EST" "2018-03-11 00:00:00 EST" "2018-03-11 00:30:00 EST"
[4] "2018-03-11 01:00:00 EST" "2018-03-11 01:30:00 EST" "2018-03-11 03:00:00 EDT"
[7] "2018-03-11 03:00:00 EDT" "2018-03-11 03:00:00 EDT" "2018-03-11 03:30:00 EDT"
[10] "2018-03-11 04:00:00 EDT" "2018-03-11 04:30:00 EDT"
您需要知道您的数据是什么时区,根据您的解释和所需的输出,您似乎一直在EST(东部标准时间(中。
还要注意force_tz
和with_tz
之间的差异
force_tz
保持时间不变,但更改时区,这将导致该设置时区的时间不存在。
当你想将时间从一个时间转换为另一个时间时,你会使用with_tz
(告诉我这里和其他地方相比有多晚(。
因此,我们取您的EST时区,并将其转换为";美国/底特律";包括EST和EDT时间
解决方案
x <- c("2018-03-10 23:30:00", "2018-03-11 00:00:00", "2018-03-11 00:30:00", "2018-03-11 01:00:00", "2018-03-11 01:30:00", "2018-03-11 02:00:00", "2018-03-11 02:30:00", "2018-03-11 03:00:00", "2018-03-11 03:30:00", "2018-03-11 04:00:00", "2018-03-11 04:30:00")
x <- ymd_hms(x, tz = "EST") # here we tell all dates we have are in EST
with_tz(x, "America/Detroit")
[1] "2018-03-10 23:30:00 EST" "2018-03-11 00:00:00 EST" "2018-03-11 00:30:00 EST" "2018-03-11 01:00:00 EST" "2018-03-11 01:30:00 EST" "2018-03-11 03:00:00 EDT" "2018-03-11 03:30:00 EDT"
[8] "2018-03-11 04:00:00 EDT" "2018-03-11 04:30:00 EDT" "2018-03-11 05:00:00 EDT" "2018-03-11 05:30:00 EDT"
将其与进行比较
force_tz(x, "America/Detroit", roll = T)
[1] "2018-03-10 23:30:00 EST" "2018-03-11 00:00:00 EST" "2018-03-11 00:30:00 EST" "2018-03-11 01:00:00 EST" "2018-03-11 01:30:00 EST" "2018-03-11 03:00:00 EDT" "2018-03-11 03:00:00 EDT"
[8] "2018-03-11 03:00:00 EDT" "2018-03-11 03:30:00 EDT" "2018-03-11 04:00:00 EDT" "2018-03-11 04:30:00 EDT"