您的位置:首页 > 编程语言 > Go语言

日期数据转换为字符串再转换为日期时要注意的一点

2008-10-08 21:41 330 查看
 
我最近作的一个项目出现了下面这样的bug。(实际代码比这个复杂的多,这里只是演示这个bug的产生。)

DateTime dt1 = new DateTime(2005,5,31,15,31,00);


string strDateTime = dt1.ToString("u");


// ...... 一些数据传递操作


DateTime dt2 = DateTime.Parse(strDateTime);


int h = dt2.Hour;



DateTime类型的变量被转换成字符串,然后这个字符串又到处传递,走了很复杂的路,在接受方接受到这个字符串后,并再转换为DateTime格式,这时候两个时间的小时数不一样了。

上面演示中,dt1的 Hour 是 15 ,dt2 的 Hour 是 23。 进而造成我所碰到的这个bug。

解决方法,

DateTime dt1 = new DateTime(2005,5,31,15,31,00);


string strDateTime = dt1.ToString("u");


DateTime dt2 = DateTime.Parse(strDateTime, null,
System.Globalization.DateTimeStyles.AdjustToUniversal);


int h = dt2.Hour;
或者

DateTime dt1 = new DateTime(2005,5,31,15,31,00);


string strDateTime = dt1.ToString();


DateTime dt2 = DateTime.Parse(strDateTime);


int h = dt2.Hour;
我猜想原因应该是:
我本机日期设置是某种格式,我转换为字符串的时候,用了不是我本机的这种格式(使用了UniversalSortableDateTimePattern 这种格式( using the format for universal time display )),而转换回去的时候,确用了本机默认格式,就造成了这个问题。解决方法就是通用一个识别格式。

打印 | posted on 2005年5月31日 16:29 | Filed Under [ .net 编程心得 ] | 收藏本页 (百度搜藏)(QQ书签)(Live收藏)(Google书签)(Yahoo书签)(新浪ViVi)(搜狐网摘)(365Key网摘)(天极网摘)(博采网摘)(和讯网摘)

反馈




# re: 日期数据转换为字符串再转换为日期时要注意的一点
多半是转换过程中时区不一致造成的,23-15=8,而中国处于+8时区,我想这不会是巧合。
2005/5/31 17:04 | Lixinfeng




# re: 日期数据转换为字符串再转换为日期时要注意的一点
系统低层大多采用UTC标准时间.和本地时间是有时区差异的,无论UNIX还是windows,在处理时间上都得注意转换
2005/5/31 17:16 | vcbear




# re: 日期数据转换为字符串再转换为日期时要注意的一点
应该不是时区的问题。
控制台程序执行下述代码,就会有上述问题。

DateTime dt1 = new DateTime(2005,5,31,15,31,00);
string strDateTime = dt1.ToString("u");
DateTime dt2 = DateTime.Parse(strDateTime);
int h = dt2.Hour;

2005/6/1 17:55 | ghj1976




# re: 日期数据转换为字符串再转换为日期时要注意的一点

string strDateTime = dt1.ToString("u");

u 通用的可排序日期/时间模式 显示由与当前线程关联的 DateTimeFormatInfo.UniversalSortableDateTimePattern 属性定义的模式或者由指定格式提供程序定义的模式。因为它是定义的标准,并且属性是只读的,因此无论区域性或格式提供程序是什么,模式总是相同的。格式化遵照自定义模式“yyyy-MM-dd HH:mm:ssZ”。格式化日期和时间时不进行时区转换;所以,请在使用格式说明符之前将本地日期和时间转换为通用时间。
2005/6/2 15:03 | ayong




# re:日期数据转换为字符串再转换为日期时要注意的一点
日期数据转换为字符串再转换为日期时要注意的一点ooeess
2005/6/16 11:20 | 一氧化碳测定仪




# re: 日期数据转换为字符串再转换为日期时要注意的一点
请教一个问题
DateTime dateTime=new DateTime(2005,01,02,23,56,23,200);
string strDate=dateTime.ToString();
这样执行后,strDate为,2005-1-2 23:56:23,毫秒就被舍去了,如何能保留毫秒?谢谢!
2005/7/7 15:37 | Farseer




# re: 日期数据转换为字符串再转换为日期时要注意的一点
en
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐