我的字符串如下:
var StringDate = "Mon Oct 02 2017 16:44:23 GMT 0200 (Central European Summer Time)"
DateTime dt = DateTime.Parse(StringDate);
当我将此字符串转换为日期时,我遇到错误:“字符串未被识别为有效的DateTime异常。”和dt =“01:01:0001 00:00:00”
答案 0 :(得分:1)
这不是c#自动识别的有效日期/时间格式。
请改用此格式:
var StringDate = "Mon Oct 02 2017 16:44:23 +0200";
DateTime dt = DateTime.Parse(StringDate);
您需要修改传入的字符串。使用正则表达式(取出括号部分,删除" GMT",并在时间偏移之前添加加号)。
另一个选项是使用DateTime.ParseExact()
,但您仍然需要修改传入的字符串:
var input = "Mon Oct 02 2017 16:44:23 GMT +0200 (Central European Summer Time)";
var dateTime = DateTime.ParseExact(
input,
"ddd MMM dd yyyy HH:mm:ss 'GMT' zz'00' '(Central European Summer Time)'",
CultureInfo.InvariantCulture);
C#期望任何时区信息在号码前都有-
或+
,因此无法在不添加该字符的情况下提取时区信息。简单地说"假设"这是一个积极的价值是不够的。
此外,没有用于精确格式匹配的通配符,这意味着(Central European Summer Time)
将在匹配字符串中进行硬编码。如果您有多个不同的时区,或者即使时区名称发生变化(例如夏令时切换时间),您也会遇到很多问题。