为什么当地时间不起作用?特定时区的 POSIXct [R]

why local time dosen't work? POSIXct in specific time zone [R]

我的数据时间在EST时区,我尝试使用这个时区。

我想计算星期(本地时间,不是GMT),所以我在EDT

中手动定义了一个originTime
originTime = as.POSIXlt('2000-01-02 00:00:00 EDT')
dt2 = data.frame(time=c(as.POSIXlt('2000-01-09 00:00:05 EDT')))
dt2$week = as.integer( floor( ( as.numeric(dt2$time) - as.numeric(originTime) ) /(3600*24*7) ) )
dt2$wday = weekdays(dt2$time)

这有效。

现在我想知道,给定时间后一周是多少?

> as.POSIXlt( 1 * 3600*24*7 , origin = originTime)
[1] "2000-01-08 19:00:00 EST"

问题来了,R好像认为originTimeGMT。有人可以帮忙吗?谢谢

两个严重的问题。 EDT 并不真正存在,即使它存在也不适合于一月份的约会。 (美国)东部时区是 "EST5EDT",以区别于 Ozzie EST。 (此外,这些在不同的操作系统上可能会有所不同。)最安全的是 tz="America/New_York"。对于数据输入,您需要使用 'tz' 参数并更改 'usetz' 的默认 (FALSE) 设置:

(originTime = as.POSIXlt('2000-01-02 00:00:00', format="%Y-%m-%d %H:%M:%S",
                          tz="EST5EDT", usetz=TRUE) )
[1] "2000-01-02 EST"

使用仅用于输出的“%Z”的测试:

> format( as.POSIXlt('2000-01-02 00:00:00', format="%Y-%m-%d %H:%M:%S", 
                                            tz="America/New_York", usetz=TRUE) ,
         format="%Y-%m-%d %H:%M:%S %Z")
[1] "2000-01-02 00:00:00 EST"

我从来没有在 as.POSIXlt 中使用过 origin 参数,所以无法真正解释为什么它无法提供我一直使用 +.POSIXtseq.POSIXt 构造间隔的预期结果:

format(as.POSIXlt('2000-01-02 00:00:00', tz="America/New_York", usetz=TRUE)+ 1*3600*24*7, 
       format="%Y-%m-%d %H:%M:%S %Z")  #  %Z is only used for output
 # [1] "2000-01-09 00:00:00 EST"   A week later at midnight.

我认为需要使用格式参数强制打印时间的原因是午夜时间被缩短为仅打印日期而没有进一步的 H:M:S 信息。