繁体   English   中英

Convert.ToDateTime()的意外行为

[英]Unexpected behaviour of Convert.ToDateTime()

请考虑以下代码段:

DateTime dt = Convert.ToDateTime("06/16/2014 -0:10");
Console.Write (dt.ToString());
Console.ReadKey();

输出是6/15/2014 8:10:00 PM

这是在Web应用程序测试期间出现的,其中允许手动输入一天中的时间(日期,HH和MM在单独的ASP.Net文本框控件中),并且字符最初不限于仅数字(ASP .net验证器控件)接受“-0”为0..23范围内的整数)。

有人可以解释该字符串如何转换为此日期/时间的逻辑吗? 我想要抛出异常或“6/16/2014 12:10:00 AM”,考虑到“-0”与“0”相同(“06/16/2014 0:10”转换为“6/16” / 2014 12:10:00 AM“正如人们所料。”

根据MSDN我认为你已经设置了时区-10分钟。

dateString = "2009-05-01T07:54:59.9843750-04:00";
Convert.ToDateTime(dateString);
//    '2009-05-01T07:54:59.9843750-04:00' converts to 5/1/2009 4:54:59 AM Local time.

正如@LIUFA已经指出的那样,这是首先解析字符串然后转换为本地时间的结果。 -0:10被解释为-10分钟的时区偏移,并且根本没有指定时间部分,因此被解释为午夜。

要查看发生了什么,首先将字符串解析为DateTimeOffset

> DateTimeOffset.Parse("06/16/2014 -0:10", CultureInfo.InvariantCulture)
16.06.2014 00:00:00 -00:10

然后转换为当地时间(格林威治标准时间-4:00)

> time.ToLocalTime()
15.06.2014 20:10:00 -04:00

我相信文本的-0部分被视为时区,相对于当地时间。 这将导致程序占用本地小时并将分钟设置为字符串中给出的十分钟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM