首页 文章

DateTime.Now表示为PST服务器上的GMT时间

提问于
浏览
3

我将信息存储在数据库中,并将我的POCO属性设置为DateTime.Now .

显示此值时,它将显示为PST时间 . 我希望它显示为GMT时间 .

我会做这样的事情来显示/存储它还是有更好的方法?

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("GMT");  
var GMTTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now, tz));

此外,它需要考虑夏令时,因为英国在一年中的不同时间改变其时钟而不是美国:

UPDATE: 我发现在TimeZone设置中你可以通过GMT标准时间或格林威治标准时间,这是第一次考虑到DST

3 回答

  • 5

    将其存储为UTC . 它专为与时区无关的时间而设计 .

    DateTime currentUtcTime = DateTime.UtcNow;
    DateTime localTime = currentUtcTime.ToLocalTime();
    DateTime backToUtcAgain = localTime.ToUniversalTime();
    

    给定的 DateTime 是否已经是UTC或本地时间由 DateTime.Kind 确定 . 在序列化/反序列化 DateTime 值时(例如从数据库中),您必须牢记这一点,因为这些信息通常不会被存储,当您收回 DateTime 时,它大部分时间都会有值 DateTimeKind.Unspecified ,这可能会导致问题转换方法 . 我只是确保在从持久数据存储中加载内容时强制 DateTimeKind.Utc .

  • 1

    如果满足您的需求,那就是 DateTime.UtcNow .

  • 1

    看看DateTimeOffset .

    我建议将DateTime属性更改为此类型

    MSDN DateTime vs. DateTimeOffSet

相关问题