在数据库中保存日期时间偏移量

问题描述 投票:0回答:1

我目前在保存 UTC 时间时遇到问题。我有一个应用程序,您可以在其中为作业指定计时器,然后将其保存在数据库中。但是,我有以下问题:

电子邮件以这种方式保存:

public async Task<int> AddEmail(Email model)
{
    using var context = _contextFactory.CreateDbContext();

    model.ScheduledDate = model.ScheduledDate.ToUniversalTime();

    try
    {
        await context.Emails.AddAsync(model);
        await context.SaveChangesAsync();

        return model.Id;
    }
    catch (Exception)
    {
        return 0;
    }
}

public class Email
{
    public int Id { get; set; }

    public string Title { get; set; }

    public string Subject { get; set; }

    public string BodyHtml { get; set; }

    [Column(TypeName = “timestamp with time zone”)]
    public DateTimeOffset ScheduledDate { get; set; }

    public EmailStatus Status { get; set; }

    public string SenderEmail { get; set; }

    public List<EmailRecipient> EmailRecipients { get; set; } = [];
}

在下面一行中,我在调试过程中发现 ScheduledDate 的值为“2024-10-16 13:19:47.000 +0200”,目前是正确的。但在保存之前,我想将值标准化为 UTC。这也有效,因为我可以在保存之前从模型中读取值“2024-10-16 11:19:47.000 +0000”,这是正确的。

但是,当我事后查看数据库时,该值并未标准化为 UTC,这是我无法理解的,因为我能够在调试期间保存之前检查正确的值,并且它仍然是正确的。有什么问题吗?

最终目标是将 UTC 标准化时间存储在数据库中,应用程序也在我的服务器上运行,该服务器位于不同的位置,因此我也可以使用传输时区的计时器。

c# postgresql utc .net-8.0 datetimeoffset
1个回答
1
投票

如果您保存为“带有时区的时间戳”(听起来像是),那么它会保存在 UTC 中(此处的文档

它将根据您的客户指定的本地时区显示。或者,如果您愿意,您可以询问特定时区的时间。

© www.soinside.com 2019 - 2024. All rights reserved.