【问题标题】:POSIXct Strips Seconds from 12-hour TimestampPOSIXct 从 12 小时时间戳中去除秒数
【发布时间】:2020-10-07 11:42:33
【问题描述】:

我正在尝试将 12 小时时间戳转换为 R 中的 POSIXct 对象。由于某种原因,它会在转换后删除秒数。

## timestamp
chk = '17-MAY-16 04.51.34.000000000 PM'

## convert
as.POSIXct(chk, format = '%d-%b-%y %I.%M.%S.%OS %p', tz = 'America/New_York')
[1] "2016-05-17 16:51:00 EDT"

我是不是做错了什么?

【问题讨论】:

    标签: r timestamp posixct


    【解决方案1】:

    它不会删除秒数。它只是遵循打印和格式化的默认值,包含亚秒。

    举个例子

    • 实际上有亚秒级条目
    • options(digits.secs) 设置正确的会话中运行
    • 更正了格式字符串中的一个错误

    演示:

    R> options(digits.secs=6)    # important to tell R we want subsecs
    R> input <- '17-MAY-16 04.51.34.123456 PM'
    R> as.POSIXct(input, '%d-%b-%y %I.%M.%OS %p', tz = 'America/New_York')
    [1] "2016-05-17 16:51:34.123456 EDT"
    R> 
    

    如果我们重置digits.secs=0,它只会回退到整秒(这对于许多设置来说毕竟是一个很好的默认设置,尽管有人可能会争辩说%0S 可以覆盖它...)

    R> options(digits.secs=0)    # reset
    R> as.POSIXct(input, '%d-%b-%y %I.%M.%OS %p', tz = 'America/New_York')
    [1] "2016-05-17 16:51:34 EDT"
    R> 
    

    还要注意格式字符串的微小变化。不要同时使用%S%OS

    【讨论】:

    • 谢谢!我没有意识到在格式化字符串中同时使用%S%OS 是一个错误。这解决了我的问题。
    • 嗯...我实际上有一个包可以解决这些问题 ;-) anytime(但它对%Ystrong偏好优于%y通常的原因)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多