【问题标题】:Added an hour on to parsed date在解析日期上增加了一个小时
【发布时间】:2018-09-23 21:10:31
【问题描述】:

我将此发布到 ASP.net Core 操作...

{
   "Start":"2018-09-30T00:00:00+00:00",
   "Finish":"2018-10-01T00:00:00+00:00"
}

它模型绑定到两个 Date? 属性,但值是相同的日期,但时间是凌晨 1 点。

为什么会这样?它似乎只在“+00:00”出现时才会这样做,所以我猜这代表格林威治时间,服务器目前在夏季时间为 +1。

【问题讨论】:

  • 嗨,Ian,我假设您使用的是自定义模型绑定器;你能把解析这些的代码贴出来吗?
  • 我没有使用自定义模型绑定器。我认为正在运行的是用于日期的标准 ASP.net Core 模型绑定器。
  • 我担心你会这么说......老实说,你最好将日期作为字符串传递给你的控制器并在代码中解析它们。
  • 如果在生成 JSON 时将“+00:00”替换为空字符串,似乎可以正常工作。使用带有 Newtonsoft JSON 的自定义序列化程序可能是一种安全的方法。
  • 您可以尝试的另一件事是将模型属性类型更改为 DateTimeOffset 而不是 DateTime

标签: asp.net-core


【解决方案1】:

我基本上使用了这个答案...https://stackoverflow.com/a/38276403/221683

此自定义格式化程序不包括日期字符串中的时区。

public class DateTimeConverter : DateTimeConverterBase
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
    {
        writer.WriteValue(((DateTime) value).ToString("yyyy-MM-ddTHH:mm:ss"));
    }
}

var serializedItem = JsonConvert.SerializeObject(item, new DateTimeConverter());

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多