字符串转换成日期类型的通用方式 字符串转成日期时间格式
今天发现了一个Bug,关于字符串转换成日期类型的。比如这样的字符串:
Thu Sep 05 11:54:13 +0800 2024
把它转换成DateTime类型。
我之前的做法是用这样的语句:
string created_at = "Thu Sep 05 11:54:13 +0800 2024";
string str_date_pattern = "ddd MMM dd HH:mm:ss zzz yyyy";
System.DateTime dt = System.DateTime.ParseExact(created_at, str_date_pattern, System.Globalization.CultureInfo("en-GB"));
而且在我的电脑上一直运行良好。
今天一个客户说他的电脑从昨天开始就无法正常运行了,之前一直好好的。
我远程查看最终锁定了错误,就是在ParseExact的时候报了异常。大概意思是不能解析指定CultureInfo的字符。我对比了我的电脑与客户电脑的时间格式设置、区域设置,没发现有什么不同。而且我指定的是英文,又不是中文,为啥会出现两台电脑结果不同呢?
找了半天也没发现什么可疑之处,于是我把en-GB换成了zh-CN,结果两台电脑的转换都报异常了。这是意料之中的 ,说明关键点就在指定的CultureInfo上。
到这里,其实如果加上一段异常捕获,这个问题也就过去了。因为出错的只是这台电脑,其他电脑也都是正常的,鬼知道他这台电脑干了些啥。
但这样解决问题不够优雅。于是继续查资料,看有没有更好的解决办法。
于是问了大模型,果然没让我失望:
于是我把代码改成这样:
string created_at = "Thu Sep 05 11:54:13 +0800 2024";
string str_date_pattern = "ddd MMM dd HH:mm:ss zzz yyyy";
System.DateTime dt = System.DateTime.ParseExact(created_at, str_date_pattern, System.Globalization.CultureInfo.InvariantCulture);
客户那里也正常了,这样的问题解决才够优雅。
不过还留了一点遗憾,就是客户的机器上到底是什么原因导致的报错,我还没查清楚,但客户急着用电脑,我就没再继续跟了。