在R中将MDY-HMS转为YMD-HMS时如何保留午夜时间戳
解决lubridate转换午夜时间后时分秒丢失的问题
这是日期时间对象的默认显示格式优化导致的——mdy_hms已经正确识别了午夜时间(内部存储的是2023-12-14 00:00:00 UTC),只是当时分秒全为0时,默认打印会省略这部分内容。以下是两种可行的处理方式:
方法1:强制格式化输出为字符串
如果需要得到固定格式的字符串结果,直接用format()函数指定输出模板:
library(lubridate) # 转换日期时间 dt_obj <- mdy_hms("12/14/23 12:00:00 AM", tz = "UTC") # 强制输出完整格式 format(dt_obj, "%Y-%m-%d %H:%M:%S UTC")
执行后会返回:"2023-12-14 00:00:00 UTC"
方法2:修改全局显示选项(保留日期时间对象)
如果需要保持日期时间对象的属性,同时让它默认显示完整时分秒,可以修改lubridate的全局显示宽度:
library(lubridate) # 设置全局显示完整日期时间格式 options(lubridate.width = "full") # 转换并打印 dt_obj <- mdy_hms("12/14/23 12:00:00 AM", tz = "UTC") dt_obj
此时直接打印dt_obj就会显示完整的2023-12-14 00:00:00 UTC
验证时间正确性
可以通过提取时分秒确认内部存储的准确性:
hour(dt_obj) # 返回0 minute(dt_obj) # 返回0 second(dt_obj) # 返回0
说明时间部分并未丢失,只是显示被简化了。
内容的提问来源于stack exchange,提问作者Vadim Katsemba
相关产品推荐
相关产品推荐

