代码之家  ›  专栏  ›  技术社区  ›  Todd Burus

怎样才能让minute()返回00而不是0?

  •  1
  • Todd Burus  · 技术社区  · 6 年前

    我正在从r中的dttm对象中提取时间数据,并将其格式化为hh:mm。我已经能够用

    paste(hour(datetime), minute(datetime), sep=':')
    

    只有一个例外:当分钟数小于10时。当我这样做时,minute函数只返回分钟数,不带前导0。例如:

    library(lubridate)
    
    datetime = ymd_hms('2018-11-18 14:00:00')
    
    minute(datetime)
    

    这就产生了

    > minute(datetime)
    [1] 0
    

    我相信有使用HMS或其他软件包/功能的选择,或者通过构建一个if-then,但是我希望尽可能减少依赖性和复杂性,并坚持在lubridate的细节中尽可能实现我的目标。

    (注意:我意识到同样的问题存在于hour()中,但我使用的所有时间都是pm,所以在我的情况下,它并不是那么紧迫)。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Vivek Kalyanarangan    6 年前

    format 您可以在指定之后获得自己的自定义日期格式-

    > format(datetime, "%M")
    [1] "00"
    

    谢谢@ronak-

    > sprintf("%02d", minute(datetime))
    [1] "00"
    
        2
  •  1
  •   Hong Ooi    6 年前

    你为什么要做这些额外的工作?直接从datetime(posixct)对象中获取时间。

    strftime(datetime, "%H:%M")
    # [1] "14:00"