【问题标题】:Why does R's strftime return the previous month for midnight?为什么 R 的 strftime 会返回上个月的午夜?
【发布时间】:2026-01-19 07:50:02
【问题描述】:

这是在边缘,是一个病态的案例,但它给我带来了麻烦:

> 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"

这是怎么回事?

【问题讨论】:

    标签: r datetime strftime


    【解决方案1】:

    将时区添加到strftime

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

    解释:

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

    来自?strftime

    tz 指定用于转换的时区的字符串。系统特定(参见 as.POSIXlt)

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

    【讨论】:

      【解决方案2】:

      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"
      

      【讨论】:

      • 感谢 Dave2e 和 @dario。强烈要求选择答案,但授予 Dave2e 以解释系统不是 UTC 如何影响结果。
      最近更新 更多