WP8中DateTime的毫秒数无法正常工作

时间:2015-02-05 11:23:16

标签: windows-phone-8

我需要将日期(以毫秒为单位)转换为用户可读日期,我无法做到。

我的日期是:1494519599999,相当于:2017年5月11日星期四18:19:59 GMT + 0200

我需要得到像dd / mm / yyyy HH:mm:ss

这样的东西

我已尝试过在其他stackoverflow帖子中阅读的内容:

DateTime date = new DateTime(long.Parse(ticks));
date.ToString("yyyy-MM-ddThh:mm:ssZ");

但是我总是每年,每月都会得到0。我认为我应该乘以或除以1000,但这是最差的。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

时间戳似乎是JavaScript中常用于表示日期的值(自1970年1月1日以来经过的毫秒数)。您可以使用以下代码将其转换为DateTimeOffset

var timestamp = 1494519599999;
var epoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);
var dateTimeOffset = epoch.AddMilliseconds(timestamp);

结果为05/11/2017 16:19:59 +00:00

我使用的是DateTimeOffset,可让您更轻松地将偏移量从+0000更改为+0200。您可以使用此代码更改偏移量,我假设您要转换为本地日期和时间。 Windows Phone 8不支持TimeZoneInfo类的完整功能,因此如果您需要转换为另一个时区,则需要创建代码,明确更改偏移量:

dateTimeOffset = dateTimeOffset.ToLocalTime();

现在结果为05/11/2017 18:19:59 +02:00

如果您希望使用DateTime代替DateTimeOffset,则可以使用此代码创建UTC DateTime

var timestamp = 1494519599999;
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var dateTime = epoch.AddMilliseconds(timestamp);

结果为05/11/2017 16:19:59,如果您的本地时区偏移量为+0200,则可以将其转换为本地DateTime以获得所需的结果。但是,如果涉及时区,我建议您使用DateTimeOffset

答案 1 :(得分:0)

试试这个:

var time = TimeSpan.FromMilliseconds(milliseconds);