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

时间:2012-09-05 10:36:25

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

我有一个共同的问题:

需要在时区之间转换时间

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

2-将其转换为UTC

所以经过一些搜索后我发现找到客户端时区的唯一方法是使用java脚本,我也使用This Library,但是这个库以这种格式返回了时区:{{1}喜欢:Location/CityName

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

"America/New_York"

因此,您看到TimeZoneInfo.ConvertTimeToUtc(clientsidedatetime, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time") /*Client Time Zone Name*/); 中使用的时区格式与我返回的java脚本不同。

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

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

1 个答案:

答案 0 :(得分:3)

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

Olson时区根本不兼容Microsoft Windows时区标识符 - .Net TimeZoneInfo类使用的时区标识符。 Microsoft长期拥有自己的时区数据库,由Windows Update维护,并讨论了by Microsoft here

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

.Net可以使用多个库来处理Olson时区和CLDR数据。最好的(恕我直言)是StackOverflow名人Jon Skeet的NodaTime。这是一个来自Java的高度受欢迎的库的端口,其中包括一个Olson时区实现,以及一组重新设计的日期操作类,它们在很多方面都优于Microsoft。

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

<强>更新
所有这些信息以及其他信息都可以在StackOverflow TimeZone tag wiki中找到。