代码改变世界

关于DateTime和String转换的容易犯得错误

  JustRun  阅读(1227)  评论(3编辑  收藏  举报

字符串转换成DateTime

在开发中,常常会有DataTime类型和String类型的互相转换的要求,比较常用的写法是

var date = Convert.ToDateTime("2012/06/08 09:10:10");

 咋一看这个代码好像没有什么问题, 实际运行也没发现问题。但是客户的机器上却是有转换的异常。

后来经过调查发现,客户电脑上系统设置的CultureInfo是西班牙。这样代码会认为2012/06/08 09:10:10 不是一个合法的日期字符串。

 正确的写法应当是:

var dtFormat = new DateTimeFormatInfo {LongDatePattern = "yyyy/MM/dd hh:mm:ss"}; //指定以特定格式转换成DateTime

var date = Convert.ToDateTime("2012/06/08 09:10:10", _dtFormat)

 DateTime转换成字符串

var dateString = System.DateTime.Now.ToString()

 这样转换的字符串同样会根据运行的系统的CultureInfo不同而有不同格式的输出。

对于WCF, Web service, Ajax这样的客户端和服务端如果是不同的CultureInfo的情况下,非常容易出错。

 在转换成字符串的时候,加上CultureInfo.InvariantCulture

var dateString = System.DateTime.Now.ToString(CultureInfo.InvariantCulture)

 同时在从字符串转换回来的时候,

var date = DateTime.Parse(serverInfo.ServerDateTimeString, CultureInfo.InvariantCulture)

 这个CultureInfo有点像英语格式,但它不和国家地区挂钩,它可以提供一个可靠的在多语言环境下的规范格式化

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2009-06-08 asp.net mvc更换命名空间的错误
点击右上角即可分享
微信分享提示