为何as.POSIXlt("1994-01-01")在R中返回格式错误?
问题原因与解决方案
问题根源
这个错误的核心原因是你当前使用的America/Lima时区在1994年1月1日存在时间歧义/无效时间点:
秘鲁在1994年1月1日取消了夏令时,当时钟运行至1994-01-01 00:00时,会被回拨至1993-12-31 23:00(夏令时结束调整),导致1994-01-01 00:00这个本地时间点实际不存在。
R在调用as.POSIXlt处理仅含日期的字符串时,会默认拼接00:00:00作为时间,再转换为本地时区。由于这个时间点在America/Lima时区无效,R无法完成解析,因此抛出“字符字符串非标准明确格式”的错误。而1993-12-31和1994-01-02的00:00在该时区是有效的,所以能正常解析。
解决方案
你可以通过以下几种方式解决这个问题:
- 指定无歧义的时区:直接使用UTC时区,避免夏令时调整的影响:
as.POSIXlt("1994-01-01", tz = "UTC") - 明确指定时间格式并添加有效时间:如果需要保留
America/Lima时区,可以指定一个该时区存在的时间点(比如01:00):as.POSIXlt("1994-01-01 01:00:00", format = "%Y-%m-%d %H:%M:%S", tz = "America/Lima") - 先转日期再转时区:先用
as.Date处理(不涉及时区),再转换为指定时区的POSIXlt对象:as.POSIXlt(as.Date("1994-01-01"), tz = "UTC")
内容的提问来源于stack exchange,提问作者Wencheng Lau-Medrano
相关产品推荐
相关产品推荐

