奇怪的Unix时间戳转换

时间:2013-08-14 19:32:03

标签: c# datetime timezone unix-timestamp

我正在使用Windows Phone 8,需要将DateTime对象转换为unix时间戳。

我知道有很多关于如何做到这一点的帖子,但我有一个奇怪的错误,我无法弄明白。

我这样做:

double val = (value.Ticks - New DateTime(1970,1,1).Ticks) / TimeSpan.TicksPerSecond;

其中value是我想要转换为unix时间戳的DateTime对象。 我知道这个价值包含了合适的时间, (在调试期间我可以看到它有正确的日期+时间)

但转换后的unix值总是+2小时。 时区必须存在问题。

有人能帮助我吗?我觉得在WP下处理时区非常烦人,因为没有方法可以转换到UTC或Local以外的特定时区。

1 个答案:

答案 0 :(得分:2)

根据this documentationDateTime的3参数构造函数:

DateTime(Int32, Int32, Int32)

“将DateTime结构的新实例初始化为指定的年,月和日。”它没有指定时区的方法,文档也没有指定结果的时区。我猜这是当地时间。

还有另一个构造函数:

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

“将DateTime结构的新实例初始化为指定的年,月,日,小时,分钟,秒和协调世界时(UTC)或当地时间。”

尝试替换

New DateTime(1970,1,1).Ticks

通过

New DateTime(1970,1,1,0,0,0,DateTimeKind.Utc).Ticks

获取代表1970-01-01 00:00:00 UTC 的DateTime(如果我正确记住语法)。