我知道有很多关于此问题的问题,但我一直在努力让这种转换工作,并且在将答案应用于此处发布的同一问题时没有运气。每次我尝试将字符串解析为DateTime时,我得到“字符串未被识别为有效的DateTime”异常。如果我使用Convert.ToDateTime,我可以从我的字符串中获取一个Date,但我也需要hh:ss。
这是我的简化代码,它毁了我的一天:
var test = "2015-05-08T05:00Z";
DateTime testTime = new DateTime();
//testTime = Convert.ToDateTime(test);
testTime = DateTime.ParseExact(test, "mm/DD/yyyy HH:ss",
System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(testTime);
为什么尝试转换时此字符串无法识别为有效的DateTime? 感谢所有帮助
答案 0 :(得分:2)
试试这个......
var test = "2015-05-08T05:00Z";
DateTime testTime = new DateTime();
testTime = DateTime.Parse(test, null, System.Globalization.DateTimeStyles.RoundtripKind);
Console.WriteLine(testTime);
Console.ReadLine();
甚至使用DateTime.ParseExact()
var test = "2015-05-08T05:00Z";
DateTime testTime = new DateTime();
testTime = DateTime.ParseExact(test, "yyyy-MM-ddTHH:ssZ", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
Console.WriteLine(testTime);
Console.ReadLine();
结果:
答案 1 :(得分:0)
您正在进行精确解析,这意味着解析格式字符串必须与日期文字字符串完全匹配。但是你的解析格式字符串在ParseExact
中/
而不是-
。T
Z
不匹配。@ Shar1er80的解决方案很好,让您不必为ParseExact指定正确的解析格式字符串。我建议继续这样做。
但是,如果你想使用ParseExact,你需要这样做:
testTime = DateTime.ParseExact(test, "yyyy-MM-ddTHH:ssZ",
System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal);
请注意,我添加了DateTimeStyle
AdjustToUniversal
以确保您的时间被解释为UTC。解析格式字符串中的Z就是消耗Z.有关Z问题的更多信息,请参阅https://stackoverflow.com/a/833143/49251。实际上,Z本身并不是格式字符串的一部分。
答案 2 :(得分:0)
您正在使用的格式字符串("mm/DD/yyyy HH:ss"
)不会以任何方式匹配您的输入。
您是否看过DateTime.ParseExact
文档?你可以尝试这样的事情:
testTime = DateTime.ParseExact(test, "yyyy-MM-ddTHH:ssZ",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.AssumeUniversal);
几点说明:
testTime = new DateTime()
没有意义。只需完全放弃该行并使用var testTime = DateTime.ParseExact(...);
HH:ss
是您想要的吗?这似乎是写一个时间的一种非常奇怪的方式。 HH:mm
或mm:ss
会更有意义。答案 3 :(得分:0)
您应该修复预期的模式并考虑时区。
如果您需要DateTimeKind.Local
的日期时间:
var date = DateTime.ParseExact("2015-05-08T05:00Z", "yyyy-MM-dd'T'HH:mm'Z'",
CultureInfo.InvariantCulture);
如果您需要DateTimeKind.Utc
的日期时间:
var date = DateTime.ParseExact("2015-05-08T05:00Z", "yyyy-MM-dd'T'HH:mm'Z'",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal
| DateTimeStyles.AdjustToUniversal);