我正在与我的模型进行斗争,以便在不同时区使用的Web应用程序中存储日期。目前,所有日期都以UTC日期存储。因此,假设我允许用户保存交易日期,屏幕上的字段为“交易日期”。我默认为DateTime.UTCNow。 SQL Server在美国,我在澳大利亚。
所以,我现在所做的是,当我提供默认交易日期时,我将GMT偏移添加到UTC现在日期:
var usersCurrentDate = DateTime.UtcNow.AddSeconds(GmtOffset.Value);
其中GmtOffset是以秒为单位的值,与GMT不同。
此代码有效 - 用户可以在其区域中看到当前日期/时间。
我的问题是 - 我应该如何存储它。转到用户界面,我进行上述转换。我是否应该在转换到用户输入日期的数据库的路上转换回UTC日期/时间?
在这种情况下,我始终确保数据库中的所有日期都是UTC日期。然后,当我从数据库中获取数据时,我需要记住转换为本地时间吗?那么,有一个函数需要一个本地时间(由用户输入)并将其转换为UTC?
类似的东西:
public DateTime UserDateToUTC(DateTime userDate)
{
return DateTime.UtcNow.AddSeconds(GmtOffset.Value * -1);
}
这是一种可接受的模式吗?