字符串转换成日期类型的通用方式 字符串转成日期时间格式
今天发现了一个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);
客户那里也正常了,这样的问题解决才够优雅。
不过还留了一点遗憾,就是客户的机器上到底是什么原因导致的报错,我还没查清楚,但客户急着用电脑,我就没再继续跟了。
相关文章
- Linux服务器硬件信息查询与日常运维命令总结
- Linux服务器带宽跑不满?用ethtool调优网卡参数,性能提升30%
- 如何在 Rocky Linux 中查看网卡流量?跟着小编学习iftop安装和使用
- Linux查看网卡速率_linux查看网卡当前速率
- 五一我要看七天小说!免费开源的轻量化书库talebook搭建流程。
- 我是如何用这3个小工具,助力小姐姐提升100%开发效率的
- html5和css3的常用参考网_基于html5和css3的网页制作
- 超详细的网络抓包神器 tcpdump 使用指南
- Vue 技术栈(全家桶)_vue全栈项目教程
- 学习ES6- 入门Vue(大量源代码及笔记,带你起飞)