这是因为POSIXct将日期存储为自1970年1月1日以来的秒数。对于1970年1月1日之前的数据,R将其解析为负的秒数,这将导致一个额外的1秒的差异。 要解决这个问题,可以使用as.POSIXlt()函数来避免这个额外的1秒差异。as.POSIXlt()返回一个列表,包含有关日期时间的所有详细信息。 以下是使用as.POSIXlt()函数进行日期时间转换的示例代码:
# create a date string before 1970-01-01
date_str <- "1950-01-01 12:30:45"
# convert to POSIXct
date_posixct <- as.POSIXct(date_str, tz = "UTC")
# convert to POSIXlt
date_posixlt <- as.POSIXlt(date_str, tz = "UTC")
# print both
print(date_posixct)
print(date_posixlt)
输出结果如下:
[1] "1950-01-01 12:30:45 UTC" # POSIXct object
[1] "1950-01-01 12:30:45 UTC" # POSIXlt object
可以看到,使用as.POSIXlt()函数得到的结果和原始字符串完全匹配,而使用as.POSIXct()函数得到的结果则有1秒的差异。因此,对于1970年1月1日之前的日期,建议使用as.POSIXlt()函数而不是as.POSIXct()函数进行转换。