提问人:fingers10 提问时间:8/2/2023 最后编辑:fingers10 更新时间:8/2/2023 访问量:61
DateTimes 以不同的值存储在 Postgres 数据库中,Entity Framework Core 位于 ASP.NET Core 中
DateTimes are stored with different values in Postgres database with Entity Framework Core in ASP.NET Core
问:
我有一个和 .我进行了如下所示的简化来描述问题。OrderEntity
OrderItemEntity
OrderEntity
:
public class OrderEntity
{
public DateTime OrderDate { get; private set; } = DateTime.Now;
public DateTimeOffset CreatedAt { get; protected set; }
}
OrderItemEntity
:
public class OrderItemEntity
{
public DateTime? StartDate { get; private set; }
public DateTimeOffset CreatedAt { get; protected set; }
}
下面是 中的请求本地化设置,Program.cs
Program.cs
:
app.UseRequestLocalization(options =>
{
var supportedCultures = new[] { "en", "en-IN", "en-US" };
options.SetDefaultCulture("en-IN");
options.AddSupportedCultures(supportedCultures);
options.AddSupportedUICultures(supportedCultures);
options.ApplyCurrentCultureToResponseHeaders = true;
})
每当创建订单时,将自动作为用户的输入传递,并将在保存并设置为 之前拦截所有实体。所有请求都将设置标头,在本例中,用户来自印度,因此它将是OrderDate
DateTime.Now
OrderItem
StartDate
Local DateTime
Entity Framework Core
CreatedAt
DateTimeOffset.Now
Accept-Language
en-IN
应用程序分别在云中使用 postgres db 和 postgres db 运行。对于相同的输入,存储在数据库中的数据是不同的,这使得查询数据和向用户显示变得困难。on-prem
on-prem
cloud
现在,当用户通过运行英语印度语言的浏览器从用户创建订单时,以下是在存储的数据中观察到的差异。02 August 2023 02:00 PM
DBType | C# 类型 | 田 | 输入 | On Prem (英语: India Machine) | AWS 云 |
---|---|---|---|---|---|
不带时区的时间戳 | 日期时间 | 开始日期 | 01-08-2023 00.00 (2023年8月1日凌晨12:00) |
01-08-2023 00.00 (2023年8月1日凌晨12:00) |
31-07-2023 18.30 (2023年7月31日 下午06时30分) - 与用户输入不同 |
不带时区的时间戳 | 日期时间 | 订单日期 | - | 02-08-2023 02.00 (2023 年 8 月 2 日下午 2:00) - 与用户创建相同 |
02-08-2023 08.30 (2023 年 8 月 2 日上午 8:30) - 与用户创建相同,但偏移差异 |
带时区的时间戳 | DateTimeOffset | 创建在 | - | 02-08-2023 02.00 +5.30 (2023年8月2日 下午02:00) - 与用户创建日期相同 |
02-08-2023 02.00 +5.30 (2023年8月2日 下午02:00) - 与用户创建日期相同 |
我现在明白了 DateTime 需要保留在数据库中的 UTC 中。但是,想知道在 AWS 云中对于给定请求如何与 .OrderDate (DateTime.Now)
CreatedAt (DateTimeOffset.Now)
那么现在哪个是正确的呢?
CreatedAt
-DateTimeOffset.Now
正确的存储方式是什么?或者我需要将其更改为 ?DateTimeOffset.UtcNow
OrderDate
-DateTime.Now
需要更改为或列本身应该更改并存储?DateTime.UtcNow
DateTimeOffset
DateTimeOffset.UtcNow
StartDate
- 用户输入(本地时间) - 在数据库中存储为 UTC DateTime - 这里应该做什么?这也需要改为列?DateTimeOffset
答: 暂无答案
评论