.NET格林威治标准时间

时间:2009-09-12 22:50:43

标签: c# datetime

有没有办法在1970年1月1日格林威治标准时间到达日期时间?

如果我只是指定新的日期(1970,1,1),我会用我当前的时区来获取它。

3 个答案:

答案 0 :(得分:6)

GMT等于UTC (协调世界时),或多或少(除非你处理的是几分之一秒,没有区别)。 DateTimeKind,一个允许您选择是以本地时区还是以UTC显示时间的枚举,内置于 DateTime 构造函数中。使用它,我们可以达到相当于GMT。

我们要使用的构造函数如下:

DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, DateTimeKind kind)

(一个是毫秒参数,另一个没有):

DateTime(int year, int month, int day, int hour, int minute, int second, DateTimeKind kind)

要获取 1970年1月1日的UTC日期时间,我们可以使用以下内容:

DateTime inGMT = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); //using 1st constructor above

DateTime inGMT = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); //using 2nd constructor above

注意:枚举DateTimeKind的内容如下:

  • 未指定(可以是本地时间或UTC)
  • UTC
  • 本地

更新 Thomas Levesque 在他的回答中提出了一个非常有创意的解决方案,但是我不确定它是否是最直接的方法,如果它是一个可行的方法,可用于任何时区。我认为他说的是你可以从 DateTime.Now DateTime.UtcNow 计算 DateTimeOffset ,并将计算出的偏移量应用到1月1日,1970年在您自己的时区,以UTC / GMT时间为您提供。 我不确定是否有简单的方法来计算其他时区的偏移量,然后这对问题来说有点多余了。

UPDATE#2 :我添加了另一个DateTime构造函数,它完成了同样的事情,但缺少毫秒参数。它们可以互换。

答案 1 :(得分:3)

查看DateTimeOffset结构

编辑:实际上,在进一步阅读DateTimeOffset之后,它可能不是您尝试做的最合适的解决方案......我认为这是您问题的最直接答案:

DateTime epoch = DateTime.SpecifyKind(new DateTime(1970, 1, 1), DateTimeKind.Utc);

答案 2 :(得分:2)

出于所有实际目的,

GMT与UTC相同。

这意味着您只需使用带有DateTime constructors参数的DateTimeKind之一,将其设置为DateTimeKind.Utc

DateTime gmt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);