C# 将字符串转换为有效的日期时间
我知道关于这个问题有很多问题,但我整天都在努力让这个转换工作,在这里发布的同一个问题的答案应用时没有运气。每次尝试将字符串解析为DateTime时,都会出现“字符串未被识别为有效的DateTime”异常。如果我使用Convert.ToDateTime,我可以从字符串中获取日期,但我还需要hh:ss 以下是我的简化代码,它毁了我的一天:C# 将字符串转换为有效的日期时间,c#,C#,我知道关于这个问题有很多问题,但我整天都在努力让这个转换工作,在这里发布的同一个问题的答案应用时没有运气。每次尝试将字符串解析为DateTime时,都会出现“字符串未被识别为有效的DateTime”异常。如果我使用Convert.ToDateTime,我可以从字符串中获取日期,但我还需要hh:ss 以下是我的简化代码,它毁了我的一天: var test = "2015-05-08T05:00Z"; DateTime testTime = new DateTime(); //testTime =
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);
为什么在尝试转换时无法将此字符串识别为有效的日期时间?
非常感谢所有帮助您正在进行精确解析,这意味着解析格式字符串必须与日期文字字符串完全匹配。但是您的解析格式字符串在ParseExact中
/
而不是-
T
Z
不匹配testTime = DateTime.ParseExact(test, "yyyy-MM-ddTHH:ssZ",
System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal);
请注意,我添加了AdjustToUniversal
的DateTimeStyle
,以确保您的时间被解释为UTC。解析格式字符串中的Z只是用来使用Z。有关Z本身实际上不是格式字符串的一部分的问题的更多信息,请参阅。试试这个
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()
结果:
您使用的格式字符串(
“mm/DD/yyyy HH:ss”
)与您的输入不匹配
你看过文件了吗?您可以尝试以下方法:
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
更有意义你应该修正你的预期模式,并考虑时区 如果您需要的日期时间为
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);
如果您的日期字符串中有
-
,为什么要让c查找/
?请查看中的格式。看看你的绳子。再次回顾一下您的格式。得出一个明显的结论。阅读。这可能属于“广泛模式不兼容”的范畴。@CharlesMager-Wow!这很好地适用于当前的情况,我没想到,那太棒了。不仅如此,他有yyyy DD mm,而预期的是mm DD yyyy。这是两种完全不同的格式。是的,刚刚添加了这一格式。感谢您的解释,以及解释Z@DWright的链接。这非常有帮助。请您详细解释一下DateTimeStyles.RoundtripKind
?
var date = DateTime.ParseExact("2015-05-08T05:00Z", "yyyy-MM-dd'T'HH:mm'Z'",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal
| DateTimeStyles.AdjustToUniversal);