我目前在保存 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 标准化时间存储在数据库中,应用程序也在我的服务器上运行,该服务器位于不同的位置,因此我也可以使用传输时区的计时器。
如果您保存为“带有时区的时间戳”(听起来像是),那么它会保存在 UTC 中(此处的文档)
它将根据您的客户指定的本地时区显示。或者,如果您愿意,您可以询问特定时区的时间。