【问题标题】:String was not recognized as a valid DateTime 01:01:0001 error字符串未被识别为有效的 DateTime 01:01:0001 错误
【发布时间】:2017-10-02 14:49:03
【问题描述】:

我的字符串如下:

var StringDate = "Mon Oct 02 2017 16:44:23 GMT 0200 (Central European Summer Time)"
DateTime dt = DateTime.Parse(StringDate);

当我将此字符串转换为日期时出现错误:“字符串未被识别为有效的日期时间异常。”和 dt = "01:01:0001 00:00:00"

【问题讨论】:

  • 您是否尝试过使用ParseExact()
  • 我试过 ParseExact(StringDate, "dd:mm:yyyy", CultureInfo.InvariantCulture) 但它不起作用
  • 您需要指定 input 字符串的 exact 格式。
  • 问问自己,Mon Oct 02 2017 16:44:23 GMT 0200 (Central European Summer Time) 是否与dd:mm:yyyy完全匹配

标签: c# datetime


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多