gpt4 book ai didi

javascript - ColumnMapping.DataTableToObjectList 为我提供缺少时区信息的 DateTime 属性

转载 作者:太空宇宙 更新时间:2023-11-04 16:29:03 24 4
gpt4 key购买 nike

我有一个 webapi 函数,它使用 SqlConnection、SqlCommand 等从 T-SQL 数据库检索数据。我得到一个 DataTable,我使用它转换为数据结构

var foobars = ColumnMapping.DataTableToObjectList<Foobar>(dt)

Foobar 类包含 DateTime 字段。

当我从 webapi 方法返回 foobars 时,这些日期时间将以以下格式通过网络发送:

2016-10-12T12:00:00

这似乎是一个无时区的日期时间。 AngularJS 会将其视为 12:00,而 javascript 的 Date.getHours() 将返回 14(我位于 +2 时区)。

如果我在从 Web api 方法返回之前执行此操作:

foobar.d = foobar.d.ToUniversalTime();

字符串将获得一个额外的 Z

2016-10-12T12:00:00Z

AngularJS 和 javascript 都会就具体时间达成一致(12:00,这也是预定时间)。

如果我这样做

foobar.d = foobar.d.DateStart.ToLocalTime();

字符串将是

2016-10-12T14:00:00+02:00

AngularJS 和 javascript 都报告现在是 14:00,比预期时间多了两个小时)。

据此,我得出结论

  • DateTime 对象可以是无时区的,但如果您尝试转换它,它将被视为 UTC。
  • ColumnMapping.DataTableToObjectList 创建 DateTime 对象不受时区影响的结构。

我不想“修补”每个 DateTime 对象,这将是一个错误源(这将涉及在每个 DateTime 对象上调用 ToUniversalTime())。

调用 ColumnMapping.DataTableToObjectList 时可以指定区域设置吗?

最佳答案

在 webapi 中,您可以配置 JsonFormatter 以按照您想要的方式序列化日期时间:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
}
}

这样,假设我理解您的问题,您就不必为每个日期时间都执行此操作...

关于javascript - ColumnMapping.DataTableToObjectList 为我提供缺少时区信息的 DateTime 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39978753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com