【问题标题】:convert string with utc-datetime to datetime-Ojbect将带有 utc-datetime 的字符串转换为 datetime-Object
【发布时间】:2021-10-08 01:46:09
【问题描述】:

首先我是 C# 新手。

我必须转换一个string 喜欢

  "Fri, 30 Jul 2021 11:57:58 (UTC)" 

转换成DateTime。我尝试了多种格式字符串(如"ddd, dd MMM yyyy HH:mm:ss""r""R")。但我总是收到错误消息

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

这是我最后的代码:

CultureInfo enUS = new CultureInfo("en-US");
string timeStampFormat = "ddd, dd MMM yyyy HH:mm:ss";
DateTime myDateTime;

myDateTime = DateTime.ParseExact(
  stringToFormat, 
  timeStampFormat, 
  enUS, 
  DateTimeStyles.AssumeUniversal);

感谢您的支持。

最好的问候 安德烈亚斯##标题##

【问题讨论】:

标签: c# datetime datetime-format utc


【解决方案1】:

假设你不仅可以有(UTC),还可以有(UTC+4)(UTC-5)等后缀,我建议转义(UTC)

  string stringToFormat = "Fri, 30 Jul 2021 11:57:58 (UTC)";

  ...

  DateTime myDateTime = DateTime.ParseExact(
    stringToFormat, 
    new string[] { 
      "ddd, d MMM yyyy H:m:s '(UTC)'",
      "ddd, d MMM yyyy H:m:s '(UTC'z')'",
    },
    CultureInfo.GetCultureInfo("en-US"),
    DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal);

演示:

  DateTime demo(string text) => DateTime.ParseExact(
    text, 
    new string[] { 
      "ddd, d MMM yyyy H:m:s '(UTC)'",
      "ddd, d MMM yyyy H:m:s '(UTC'z')'",
    },
    CultureInfo.GetCultureInfo("en-US"),
    DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal);

  string[] tests = new string[] {
    "Fri, 30 Jul 2021 11:57:58 (UTC)",
    "Fri, 30 Jul 2021 11:57:58 (UTC-1)",
    "Fri, 30 Jul 2021 11:57:58 (UTC+1)",
    "Fri, 30 Jul 2021 11:57:58 (UTC-14)",
  };

  string report = string.Join(Environment.NewLine, tests
    .Select(test => $"{test,-40} => {demo(test):dd.MM.yyyy HH:mm:ss}"));

  Console.Write(report);

结果:

Fri, 30 Jul 2021 11:57:58 (UTC)          => 30.07.2021 11:57:58
Fri, 30 Jul 2021 11:57:58 (UTC-1)        => 30.07.2021 12:57:58
Fri, 30 Jul 2021 11:57:58 (UTC+1)        => 30.07.2021 10:57:58
Fri, 30 Jul 2021 11:57:58 (UTC-14)       => 31.07.2021 01:57:58

【讨论】:

    【解决方案2】:

    (UTC) 导致字符串无法被识别为时间戳。您可以通过删除 (UTC) 来解决它,我在这里提供了一种方法来完成此操作。

            string stringToFormat = "Fri, 30 Jul 2021 11:57:58 (UTC)";
    
            string[] SubString = stringToFormat.Split('(');
            stringToFormat = SubString[0].Trim();
    
            string timeStampFormat = "ddd, dd MMM yyyy HH:mm:ss";
            DateTime mydateTime = DateTime.ParseExact(stringToFormat, timeStampFormat, CultureInfo.GetCultureInfo("en-US"), DateTimeStyles.AssumeUniversal);
            
    

    或将(UTC) 替换为与UTC 的偏移量,在这种情况下为0,并将(z) 添加到timeStampFormat。

            string stringToFormat = "Fri, 30 Jul 2021 11:57:58 (UTC)";
            stringToFormat = stringToFormat.Replace("(UTC)", "(-0)");
    
            string timeStampFormat = "ddd, dd MMM yyyy HH:mm:ss (z)";
            DateTime mydateTime = DateTime.ParseExact(stringToFormat, timeStampFormat, CultureInfo.GetCultureInfo("en-US"), DateTimeStyles.AssumeUniversal);
            
    

    https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings

    【讨论】:

      猜你喜欢
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2018-05-11
      • 2017-01-26
      • 2020-09-27
      • 2012-12-05
      相关资源
      最近更新 更多