使用lubridate的now()指定Etc/GMT+3时区时时间输出错误
Etc/GMT时区命名规则的反向逻辑导致时间偏差
问题的核心原因是IANA时区数据库中Etc/GMT系列的命名规则和常规认知完全相反:
Etc/GMT+N表示比UTC时间晚N小时(对应UTC-N时区)Etc/GMT-N表示比UTC时间早N小时(对应UTC+N时区)
你需要的是比UTC早3小时的UTC+3时区,应该使用参数 tzone = 'Etc/GMT-3',这样执行后就能得到预期的21:57。而你实际用的Etc/GMT+3对应UTC-3时区,所以计算出的时间是18:57减去3小时,得到15:57,和实际输出一致。
这个反向规则是IANA时区的约定,目的是匹配格林威治向西时区的标识逻辑(西经时区用+号标记),和日常口语里的UTC+X、UTC-X表述刚好相反,很容易造成混淆。
内容的提问来源于stack exchange,提问作者robotnoises
相关产品推荐
相关产品推荐

