【问题标题】:How to convert proper ISO 8601 dates in C#如何在 C# 中转换正确的 ISO 8601 日期
【发布时间】:2019-10-27 13:31:13
【问题描述】:

请帮助以下日期格式,如何将其转换为正确的日期时间?

2019-10-22T02:00:00-04:00

不确定将使用什么来转换日期时间。

我只是将它传递给变量,因为它是从 json 获取的。

var parse = JObject.Parse(times);

var dateTime = parse["Date"]["overTime"];

它返回 23/10/2019 2:00:00 am 为什么是 23 日的日期,但据说是 22 日。我怎样才能返回正确的日期和时间。请你告诉我如何转换日期并解释转换。

【问题讨论】:

  • 你在哪个时区?
  • 如何打印dateTime?我假设Console.WriteLine(dateTime.Value<DateTime>())?
  • @Sweeper 菲律宾标准时间 GMT+8 但我不希望将其转换为我的时区。我必须与给定日期在同一时区才能正确?
  • @Sweeper 是的,我只在 Console.WriteLine(dateTime); 中打印
  • 被解析的日期的原始时区偏移不会成为 DateTime 对象的固有属性。您必须单独解析“-04:00”偏移量,并使用该偏移量格式化 DateTime 输出,以确保日期和小时的原始值相同。

标签: c# json date datetime


【解决方案1】:

不要使用JObject.Parse 来解析日期/时间,而是使用DateTimeOffset.Parse。这将保留原始时区偏移量,而其他形式的解析则不会。

【讨论】:

  • DateTimeOffset.Parse 会影响 json 文件中的其他数据还是仅影响日期?
  • 这比我第一次看到它时意识到的要复杂一些。我原本认为times 只是字符串“2019-10-22T02:00:00-04:00”,但现在我发现它可能是一个更大的 JSON 值,其中包含多条数据。我认为问题在于JObject.Parse 会自动将任何看起来像日期的字符串转换为DateTime 对象,然后您才有机会以不同方式解析它。您需要一种不同的解析方法,将日期/时间字符串单独保留,将它们保留为字符串,这样您就可以在之后使用DateTimeOffset.Parse
【解决方案2】:

我已经通过使用下面的代码解决了这个问题

JObject example = JsonConvert.DeserializeObject<JObject>(times, new JsonSerializerSettings { DateParseHandling = DateParseHandling.None });

感谢您的回答!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2015-02-07
    • 2016-10-20
    • 1970-01-01
    • 2012-03-20
    相关资源
    最近更新 更多