如何将以下内容转换为System.TimeZone或System.TimeZoneInfo?
{
"timeZone": "America/Los_Angeles",
"currentOffsetMs": -25200000
}
Run Code Online (Sandbox Code Playgroud)
这是我从第三方Web服务获得的数据.
我假设偏移是与UTC的差异,我被告知"America/Los_Angeles"是奥尔森时区.Java将此解析为Java TimeZone没有问题,但我需要将其解析为C#TimeZoneInfo对象.
我从.Net服务返回UTC日期/时间列表,格式如下:
"2013-07-09 19:48:07 +00:00".
Run Code Online (Sandbox Code Playgroud)
在客户端上,我将每个字符串值转换为相应的基于UTC的时刻,就像这样
var fooUtc = new moment.utc(serverDateTimeString)
Run Code Online (Sandbox Code Playgroud)
在页面上,有一个下垂,其中包含用户可以更改的时区列表.这些绑定到时区对象的集合,如下所示:
{
id: "Central Standard Time",
label: "(UTC-06:00) Central Time (US & Canada)",
observesDaylightSavings: true,
baseUtcOffset: {
asHours: -6,
asMinutes: -360,
asText: "-06:00"
}
Run Code Online (Sandbox Code Playgroud)
然后我显示传递所选时区偏移的每个时刻,如下所示:
fooUtc.local().zone(selectedTimeZone.baseUtcOffset.asMinutes).format()
Run Code Online (Sandbox Code Playgroud)
但是,结果没有考虑夏令时,因为来自.Net的时区数据不能区分dst和非dst偏移.
有没有办法让这个工作与moment.js或新的时刻 - 时区位?我认为可以将标准UTC偏移名称(例如:"中央标准时间")映射到给定时区的Olson数据库标识符(例如:"America/Chicago"),但如果有更简单的方法,请让我知道.
我正在尝试获取所有时区。我所做的是:
$tzlist = DateTimeZone::listIdentifiers(DateTimeZone::ALL);
它给了我一个这样的数组:
Array
(
[0] => Africa/Abidjan
[1] => Africa/Accra
[2] => Africa/Addis_Ababa
[3] => Africa/Algiers
[4] => Africa/Asmara
[5] => Africa/Bamako
[6] => Africa/Bangui
[7] => Africa/Banjul
[8] => Africa/Bissau....
Run Code Online (Sandbox Code Playgroud)
我想将所有时区的时区名称更改为完整时区名称,例如
Australia/Darwin = AUS Central Standard Time
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看示例