在服务器端将客户端时间转换为UTC



我有一个常见的问题:

需要在时区之间转换时间

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

2-将其转换为UTC

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

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

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

因此,正如您所看到的,FindSystemTimeZoneById中使用的时区格式与我返回的java脚本不同。

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

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

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

Olson时区与.Net TimeZoneInfo类使用的Microsoft Windows时区标识符完全不兼容。微软长期以来一直有自己的时区数据库,由Windows Update维护,微软在这里对此进行了讨论。

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

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

据我所知,在.Net中实现IANA/Olson数据库的库有:

  • NodaTime(推荐)
  • 区域信息
  • TZ4网络

更新
所有这些信息以及更多信息都可以在StackOverflow TimeZone标记wiki中找到。

相关内容

  • 没有找到相关文章

最新更新