我有一个共同的问题:
需要在时区之间转换时间
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时间?
答案 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中找到。