为什么 R 的 strftime return 是前一个月的午夜?

Why does R's strftime return the previous month for midnight?

这就在临界点上,属于病态的情况,却给我带来了麻烦:

> strftime(as.POSIXct('2016-07-01', tz = 'UTC'), '%m')
[1] "06"

虽然我知道现在是午夜,但似乎应该是 7 点。这是 7 个:

> strftime(as.POSIXct('2016-07-02', tz = 'UTC'), '%m')
[1] "07"
> strftime(as.POSIXct('2016-07-01'), '%m')
[1] "07"

这是怎么回事?

将时区添加到 strftime :

strftime(as.POSIXct('2016-07-01', tz = 'UTC'), '%m', tz="UTC")
[1] "07"

解释:

您只指定了 as.POSIXct 的时区。然后你使用 strftime 而没有 指定时区,这会导致 strftime 退回到其默认值

来自?strftime

tz A character string specifying the time zone to be used for the conversion. System-specific (see as.POSIXlt)

如果您的系统时区不是 UTC,可能会导致这种差异。

strftime 函数默认为您的时区,因此午夜 UTC 仍然是所有西点的前一天。

将"tz="选项添加到strftime函数:

 strftime(as.POSIXct('2016-07-01', tz = 'UTC'), '%m', tz="UTC")
[1] "07"  

或使用format函数:

format(as.POSIXct('2016-07-01', tz = 'UTC'), '%m')
[1] "07"