2012-09-05 52 views
3

我有一个共同的问题:转换客户端时间UTC在服务器端

需要时间时区之间转换

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

2-将其转换为UTC

因此,经过一番搜索后,我发现唯一能找到客户端时区的方法是使用java脚本,而且我也使用This Library,但是这个库返回了这个格式的时区:Location/CityName像:"America/New_York"

然后我知道时间时区之间转换的唯一途径是:

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

所以当你看到FindSystemTimeZoneById使用的时区格式是不同的,从我的Java脚本返回。

问题是我该如何将这两种格式转换为对方,前者将Asia/Singapore转换为Singapore Time

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

+0

你试过吗? http://www.w3schools.com/jsref/jsref_gettimezoneoffset。asp –

+0

难道你只是想计算客户端的偏移量,并发回偏移量,而不是时区的名称?我想,如果你需要考虑像夏令时这样的偏移量的波动,这将是不够的。 – Jodrell

+1

@AmiramKorach我认为我们失去了日光节约 – Saeid

回答

3

像“America/New York”这样的时区是基于unix/linux系统和Internet上的标准。在原作者亚瑟·奥尔森之后,他们被称为“奥尔森”时区。它们基于的数据库有时称为“Olson数据库”,“tz数据库”或“zoneinfo数据库”。他们现在由IANA维护。你可以阅读更多关于他们on Wikipedia

Olson时区与微软Windows时区标识符 - .NET TimeZoneInfo类使用的时区不完全兼容。微软一直有他们自己的时区数据库,由Windows Update维护,并讨论了by Microsoft here

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

有几个库可用于.Net与Olson时区和CLDR数据一起工作。最好的(恕我直言)是由StackOverflow着名的Jon Skeet拍摄的NodaTime。这是一个非常受欢迎的Java库,包括一个Olson时区实现的端口,以及用于日期时间操作的一组重要类,这些类在许多方面优于微软。

我是知道的.NET实现的IANA /奥尔森数据库的库是:

UPDATE
所有这些信息,以及更多,在StackOverflow TimeZone tag wiki中可用。