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

时间:2011-07-13 10:18:38

标签: c# .net asp.net-mvc datetime

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

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

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

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

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

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

如果满足您的需求,则DateTime.UtcNow

答案 2 :(得分:1)

看看DateTimeOffset。

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

MSDN DateTime vs. DateTimeOffSet