我正在使用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以外的特定时区。
答案 0 :(得分:2)
根据this documentation,DateTime
的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(如果我正确记住语法)。