将UTC时间字符串转换为用户的本地时间[重复]
Posted
技术标签:
【中文标题】将UTC时间字符串转换为用户的本地时间[重复]【英文标题】:Convert UTC time string to the user's local time [duplicate] 【发布时间】:2016-10-03 23:39:50 【问题描述】:我目前有一个网页,其中我将文件创建的日期显示为字符串。由于该文件是在美国服务器上生成的,因此日期为 UTC。
一个示例日期是:
6/3/2016 10:13:55 AM
我想将此日期转换为访问该网页的用户的时区。全世界的人都可以访问该网页。
例如,我希望示例时间显示澳大利亚东部标准时间 (AEST) 的 6/4/2016 01:13:55 AM
。
【问题讨论】:
你如何获得文件的创建日期? 通过我的 c# 助手类中的一个方法。 . .var directory = new DirectoryInfo(path);
,var astWriteTime = directory.CreationTimeUtc;
。这段时间我以为是 CDT 时间,但我忘记了我的创建时间是 UTC。
这个问题已经被问过很多次了。请参阅发布的副本,这与下面的gravityplax 给出的答案相同。此外,如果您有格式问题或其他时区问题,您可以查看moment.js。干杯!
在此处注意您对 C# 的评论,以 UTC 获得创建时间非常棒。只是不要以特定于语言环境的格式发送出去。以 ISO8601/RFC3339 格式发送。见the W3C recommendation on this。在 .NET 中使用 .toString("o")
。 (任何好的 JSON 或 XML 序列化器也应该使用这种格式。)
【参考方案1】:
var ms = Date.parse('6/3/2016 10:13:55 AM' + ' UTC');
var date = new Date();
date.setTime(ms);
var timezone_shifted_string = date.toLocaleString();
【讨论】:
如果我的本地人不是我们,这会起作用吗? 天哪,我把这件事复杂化了。 它将默认为本地运行时的时区,但您也可以手动将其覆盖为任何时区:developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 哦 - 这完全改变了事情。但是,您仍然应该小心格式化部分。请注意,中间位不是必需的,因为您可以将字符串传递给Date
构造函数,而不是调用Date.parse
。不过,请注意字符串输入格式。我关于 M/D/Y 与 D/M/Y 的观点仍然有效。
@MattJohnson 啊,抱歉,当时误解了你。就格式化而言,如果需要控制输出格式,可以通过额外的可选字段来控制。以上是关于将UTC时间字符串转换为用户的本地时间[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UTC 日期字符串转换为本地时间 (systemTimeZone)