C# Web API 中 API 响应的 DateTime 值显示基于 .NET 版本的不同行为

DateTime value of an API's response in C# web API shows different behavior based on .NET version

提问人:Abhiram M 提问时间:9/27/2023 最后编辑:journpyAbhiram M 更新时间:9/27/2023 访问量:61

问:

我有一个简单的 C# Web API。

[HttpGet]
public DateTime GetDateResponse()
{
    var a = DateTime.Parse("2023-09-26 12:28:20.793");
    return a;
}

当我在 .NET Framework 4.7.2 中运行它时,我得到以下结果:

2023-09-26T12:28:20.793Z

但是,当我在 .NET 6 Web API 中运行此操作时,结果变为:

2023-09-26T12:28:20.793

.NET Framework 将结果解释为 UTC,但 .NET 6 没有时区信息,即使这两个对象的属性都是“未指定”KindDateTime

我相信 .NET 6 中的行为是正确的,因为没有时区信息,它不应该将其解释为 UTC。

但是,我正在将我的应用程序从 .NET Framework 迁移到 .NET 6,并且这种行为更改导致我的所有日期值在客户端中显示为错误。有什么办法可以控制这一点吗?比如使用中间件或其他东西进行配置以具有与以前相同的行为?

请注意,当我们返回 时,两个版本的行为是相同的DateTime.Now

[HttpGet]
public DateTime GetDateResponse()
{
    var a = DateTime.Now;
    return a;
}

嗯,不完全相同,在 .NET 框架中,它将当前日期转换为 UTC 并在末尾给出结果。在 .NET 6 中,它还会在结果中追加时区,如下所示。但这很好,因为这两个结果指的是同一时间。Z

C# 日期时间 ASP.NET-CORE-WEBAPI

评论

1赞 jmcilhinney 9/27/2023
您提供给我们的结果是将这些值转换为字符串。您需要查看实际值,看看差异是什么(如果有的话)。据我们所知,区别实际上在于您如何使用数据。DateTimeDateTime
3赞 Orifjon 9/27/2023
两个项目的属性是否相同?CultureInfo.CurrentCulture
0赞 Ian Kemp 9/27/2023
我的心理调试能力告诉我,这是Newtonsoft.Json与System.Text.Json的情况。但是,这里的信息远远不够,尤其是尝试的调试还不够多。
0赞 Abhiram M 9/27/2023
@Orifjon 是的,它们是一样的

答: 暂无答案