【问题标题】:DateTime.ToString() not converting timeDateTime.ToString() 不转换时间
【发布时间】:2016-07-21 08:31:37
【问题描述】:

看起来时间在转换过程中会自动更改。 我的输入是17:15:25。但是,它被转换为13:15:25 可能是什么原因?

string testDate = Convert.ToDateTime("2016-03-24T17:15:25.879Z")
                         .ToString("dd-MMM-yyyy HH:mm:ss", CultureInfo.InvariantCulture);

testDate 得到的结果是:24-Mar-2016 13:15:25

【问题讨论】:

  • 您是否检查过生成的 DateTime 是否正确? Convert.ToDateTime("2016-03-24T17:15:25.879Z") 的值?如果这不正确,那是因为您当前的语言环境设置。

标签: c# .net datetime type-conversion


【解决方案1】:

当您使用Convert.ToDateTime(内部使用DateTime.Parse)和Z(表示Zulu time)时,此方法会将您当前的时区偏移量添加到该日期时间值。

看起来您当前的时区现在是 UTC -04:00,这就是为什么方法返回 4 小时作为结果。

我建议将DateTime.ParseExactAdjustToUniversalAssumeUniversal 样式一起使用,以防止Kind 转换为Jon answered

来自AdjustToUniversal

日期和时间以协调世界时 (UTC) 形式返回。如果 输入字符串通过时区说明符表示本地时间 或AssumeLocal,日期和时间从本地时间转换为 世界标准时间。 如果输入字符串表示 UTC 时间,则通过时区 说明符或AssumeUniversal,不会发生转换。如果输入 字符串不表示本地时间或 UTC 时间,不会发生转换并且 生成的Kind 属性为Unspecified

【讨论】:

  • 我相信你的意思是UTC -04:00
  • @Ian Ups,已修复。谢谢:)
  • 很好,没问题。不错的答案。 :)
  • @Soner,谢谢,已解决。
  • @Richard 很高兴为您提供帮助。
【解决方案2】:

因为 CultureInfo.InvariantCulture。 您正在转换 GMT 中的日期

Convert.ToDateTime("2016-03-24T17:15:25.879Z")

然后您将其转换为不变文化中的字符串

ToString("dd-MMM-yyyy HH:mm:ss",CultureInfo.InvariantCulture);

您应该使用 DateTime.ParseExact,然后在转换中使用不变的文化。

【讨论】:

    【解决方案3】:

    您输入中的Z 表示UTC 时间,但Convert.ToDateTime 的默认行为是将结果转换为您的本地时间。如果您查看Convert.ToDateTime("2016-03-30T17:15:25.879Z").Kind 的结果,您会看到它是Local

    我建议使用DateTime.ParseExact,您可以在其中指定所需的确切行为,例如保留 UTC 时间:

    var dateTime = DateTime.ParseExact(
        "2016-03-30T17:15:25.879Z",
        "yyyy-MM-dd'T'HH:mm:ss.FFF'Z'",
        CultureInfo.InvariantCulture,
        DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal);
    Console.WriteLine(dateTime);      // March 30 2016 17:15 (...)
    Console.WriteLine(dateTime.Kind); // Utc
    

    然后,您可以根据需要将该值转换为字符串。

    当然,我真的建议改用我的Noda Time 项目,在那里你可以解析为InstantZonedDateTime,它会知道它是在UTC... IMO,DateTime is simply broken,正是由于您所看到的那种问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 2013-08-02
      相关资源
      最近更新 更多