我有如下字符串:
var StringDate = "Mon Oct 02 2017 16:44:23 GMT 0200 (Central European Summer Time)"
DateTime dt = DateTime.Parse(StringDate);
当我将此字符串转换为date时,出现错误:"String未被识别为有效的DateTime异常。“和dt = "01:01:0001 00:00:00“
发布于 2017-10-02 14:54:04
这不是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)
将被硬编码到匹配字符串中。如果你有多个不同的时区,或者即使时区的名称改变了(比如当夏令时切换时),你会遇到很多问题。
https://stackoverflow.com/questions/46527959
复制