【问题标题】:Convert client side Time to UTC in server side在服务器端将客户端时间转换为 UTC
【发布时间】:2012-08-30 01:26:36
【问题描述】:

我有一个常见问题:

需要在时区之间转换时间

1- 我需要找到客户端时区

2- 将其转换为 UTC

所以经过一番搜索,我发现找到客户端时区的唯一方法是使用java脚本,我也使用This Library,但是这个库以这种格式返回时区:Location/CityName Like :@ 987654324@

那么我知道在时区之间转换时间的唯一方法是:

TimeZoneInfo.ConvertTimeToUtc(clientsidedatetime, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time") /*Client Time Zone Name*/);

如您所见,FindSystemTimeZoneById 中使用的时区格式与我返回的 java 脚本不同。

问题是如何将这两种格式相互转换,例如将 Asia/Singapore 转换为 Singapore Time?

或者有没有更好的方法来查找客户端时间并将其转换为 UTC 时间?

【问题讨论】:

  • 你不只是想在客户端计算偏移量并发送回偏移量,而不是时区的名称吗?我想,如果您需要考虑由于夏令时等原因导致的偏移量波动,这将是不够的。
  • @AmiramKorach 我认为通过抵消我们失去了夏令时

标签: c# asp.net-mvc asp.net-mvc-3 datetime timezone


【解决方案1】:

像“美国/纽约”这样的时区是基于 unix/linux 的系统和一般互联网上的标准。它们被称为“奥尔森”时区,以原作者亚瑟奥尔森的名字命名。它们所基于的数据库有时称为“Olson 数据库”、“tz 数据库”或“zoneinfo 数据库”。它们现在由 IANA 维护。你可以阅读更多关于他们的信息on Wikipedia。

Olson 时区与 .Net TimeZoneInfo 类使用的 Microsoft Windows 时区标识符完全不兼容。微软早就有自己的时区数据库,由 Windows Update 维护,讨论by Microsoft here。

在这些标准之间进行转换的权威来源是Unicode CLDR,他们发布了一个可用于转换的表,但我建议您使用库来代替。

.Net 有几个库可用于处理 Olson 时区和 CLDR 数据。最好的(恕我直言)是 StackOverflow 名人 Jon Skeet 的 NodaTime。这是来自 Java 的一个非常流行的库的一个端口,其中包括一个 Olson 时区实现,以及一组经过重新设计的用于日期时间操作的类,这些类在许多方面都优于 Microsoft。

我知道在 .Net 中实现 IANA/Olson 数据库的库是:

更新
StackOverflow TimeZone tag wiki 中提供了所有这些信息以及更多信息。

【讨论】:

    猜你喜欢
    • 2012-01-26
    • 2021-01-04
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多