如何将含UTC时差的RSS pubDate字符串转换为MySQL datetime
解决RSS pubDate转MySQL datetime的时区偏移问题
嘿,我来帮你理清这个问题:
先搞懂-0800是什么
-0800是时区偏移量,代表这个时间比UTC(协调世界时)晚8小时,对应的是美国太平洋时区(PST/PDT)的偏移值。
为什么你的SQL返回NULL?
你用的%T格式符是用来匹配HH:MM:SS格式的时间字符串的,完全不匹配-0800这种时区偏移格式,所以str_to_date无法解析整个字符串,返回NULL。
正确的格式符替换方案
要匹配±HHMM形式的时区偏移,你需要用%z格式符,这是MySQL专门用来处理这种四位带符号时区偏移的格式标记。
修正后的SQL语句
select str_to_date('Mon, 26 Feb 2018 03:00:00 -0800', '%W, %e %b %Y %H:%i:%s %z') ;
额外提示
- 注意:
%z格式符在MySQL 5.5.3及以上版本才支持,如果你的数据库版本太老,可能需要先升级或者手动处理时区偏移(比如截取前19位字符再转换,但这样会丢失时区信息)。 - 当你把转换后的时间存入
datetime类型字段时,MySQL会自动将其转换为数据库服务器所在时区的时间进行存储;如果需要保留时区信息,可以考虑使用timestamp类型(会自动转换为UTC存储,查询时转回服务器时区),或者单独存储时区偏移值。
内容的提问来源于stack exchange,提问作者Nikesh Kedlaya
相关产品推荐
相关产品推荐

