字符串未被识别为有效的DateTime 01:01:0001错误

时间:2017-10-02 14:49:04

标签: c# datetime

我的字符串如下:

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”

1 个答案:

答案 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)将在匹配字符串中进行硬编码。如果您有多个不同的时区,或者即使时区名称发生变化(例如夏令时切换时间),您也会遇到很多问题。