【问题标题】:How to convert string with any format To DateTime如何将任何格式的字符串转换为日期时间
【发布时间】:2019-09-24 13:09:46
【问题描述】:

我在 Excel 中有一个DateTimestring,具有不同的格式。我想 convert 使用 c# 将 string 格式转换为 DateTime。但我收到以下异常:

字符串未被识别为有效日期时间。

DateTimeOffset.Parse("09/20/2019 17:25:59");

预期:

2019 年 9 月 20 日 17:25:59

实际:

System.FormatException

【问题讨论】:

  • 你可以做“任何”格式,你需要准确地指定它,虽然你可以指定multiple formats
  • 你提前知道每个值的格式吗?
  • 使用适当格式的ParseExact。或者将这个ofrmat对应的CultureInfo对象作为第二个参数传入,例如Parse("..",CultureInfo.GetCultureInfo("en-US"))
  • Exceldatatable 标签与这个问题有什么关系? Excel 本地存储日期,这意味着它们可以直接读取为DateTime实际问题是什么?
  • 我复制粘贴了您的代码,没有发现任何问题。似乎您的 PC 日期格式可能与您尝试解析的不同。在这种情况下,您应该使用 ParseExact

标签: c# excel datetime datatable


【解决方案1】:

你可以使用DateTime.ParseExactDoc here

var dateThatDesired = DateTime.ParseExact("09/20/2019 17:25:59","MM/dd/yyyy HH:mm:ss",CultureInfo.InvariantCulture);

如果您在 excel 表中的格式数量有限,您可以使用DateTime.TryParseExact() 对其进行测试,如果返回成功,您可以使用您将通过out 参数获得的解析日期时间。

【讨论】:

    【解决方案2】:

    首先,没有通用格式,因为日期表示是模糊的,一个经典的例子是

     01/02/03 == 2 Jan 2003 (USA)  
     01/02/03 == 1 Feb 2003 (Russia) 
     01/02/03 == 3 Feb 2001 (China) 
    

    如果您有集合预期格式,您可以尝试ParseExact,例如

     string[] possibleFormats = new[] {
       "MM'/'dd'/'yyyy HH:mm:ss",   // USA
       "dd'.'MM'.'yyyy HH:mm:ss",   // Russia
       "yyyy'-'MM'-'dd HH:mm:ss",   // China
       "yyyy'-'MM'-'dd'T'HH:mm:ss", // ISO 8601
     };
    
     string value = @"09/20/2019 17:25:59";
    
     DateTimeOffset result = DateTimeOffset.ParseExact(
       value, 
       possibleFormats, 
       CultureInfo.InvariantCulture, 
       DateTimeStyles.AssumeLocal);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      相关资源
      最近更新 更多