【发布时间】:2021-02-12 02:59:25
【问题描述】:
我遇到了 Epoch Date 转换问题。为此,我正在使用 moment.js JavaScript 库。我有一个 Epoch 格式的 UTC DateTime 值。当我在两台不同的计算机(使用不同的时区)上运行相同的纪元转换代码时,我会得到不同的日期转换结果。
我正在使用以下 JavaScript 代码:
var epochTime = 1603825239000;
var result = moment(epochTime).format('lll');
document.write(result); // the result I get is: Oct 28, 2020 6:00 AM
现在,当在另一台具有太平洋时区的计算机上运行完全相同的代码时,它会返回结果为:
var epochTime = 1603825239000;
var result = moment(epochTime).format('lll');
document.write(result); // now the result is different: Oct 27, 2020 12:00 PM
我可以做些什么来确保无论计算机时区如何,纪元日期转换结果都不会改变?我总是得到第一个转化价值,即 2020 年 10 月 28 日上午 6:00
【问题讨论】:
-
1603825239000=="2020-10-27T19:00:39.000Z"。其他任何事情都反映了到本地时间的转换 - 当然在不同的时区会有所不同。您尝试查看哪个时区?另请参阅codeofmatt.com/please-dont-call-it-epoch-time -
嗨,马特,我正在尝试获取 UTC 时间,因为在 SQL Server 中,UTC 时间戳存储为“2020-10-28 06:00:39.997”。我有一个 WCF,它以 Epoch 格式返回时间,其值为“1603825239000”
-
如果数据库确实是 UTC 时间,并且确实是早上 6 点,那么您在 WCF 组件中错误地将其转换为 Unix 时间戳。您可能已经介绍了运行该代码的计算机的本地时区。您显示的时间戳不是世界标准时间早上 6 点,而是前一天世界标准时间晚上 7 点。我建议仔细检查您的 .NET 代码,并可能提出一个显示该代码的新问题。
-
问题不在于您的 JavaScript,而明显在于您的 C# 代码。在从数据库中填充它之后,在序列化结果之前,您需要使用类似
yourDateTime = DateTime.SpecifiyKind(yourDateTime, DateTimeKind.Utc)的东西。 -
如果 json 在时间戳 (Z = UTC) 的末尾有一个
Z会更好。那么您就不需要指定种类 - Newtonsoft 会为您完成。但是,如果您确实指定了样例中显示的种类,那么您的 WCF 输出(您没有显示)将有+0000,而不是+1100。所以在某个地方你正在失去那种。一路调试并检查.Kind属性。此外,我们离这个话题开始的地方还很远。您最好提出一个新问题,重点关注代码的 C# 部分(包括 WCF)。
标签: javascript datetime timezone utc epoch