我正在使用以下下拉列表为应用程序存储时区:
<select id="timezone" name="timezone" >
<option value="-12">[UTC - 12] Baker Island Time</option>
<option value="-11">[UTC - 11] Niue Time, Samoa Standard Time</option>
<option value="-10">[UTC - 10] Hawaii-Aleutian Standard Time, Cook Island Time</option>
<option value="-9.5">[UTC - 9:30] Marquesas Islands Time</option>
<option value="-9">[UTC - 9] Alaska Standard Time, Gambier Island Time</option>
<option value="-8">[UTC - 8] Pacific Standard Time</option>
<option value="-7">[UTC - 7] Mountain Standard Time</option>
<option value="-6">[UTC - 6] Central Standard Time</option>
<option value="-5">[UTC - 5] Eastern Standard Time</option>
<option value="-4.5">[UTC - 4:30] Venezuelan Standard Time</option>
<option value="-4">[UTC - 4] Atlantic Standard Time</option>
<option value="-3.5">[UTC - 3:30] Newfoundland Standard Time</option>
<option value="-3">[UTC - 3] Amazon Standard Time, Central Greenland Time</option>
<option value="-2">[UTC - 2] Fernando de Noronha Time, South Georgia & the South Sandwich Islands Time</option>
<option value="-1">[UTC - 1] Azores Standard Time, Cape Verde Time, Eastern Greenland Time</option>
<option value="0">[UTC] Western European Time, Greenwich Mean Time</option>
<option value="1">[UTC + 1] Central European Time, West African Time</option>
<option value="2">[UTC + 2] Eastern European Time, Central African Time</option>
<option value="3">[UTC + 3] Moscow Standard Time, Eastern African Time</option>
<option value="3.5">[UTC + 3:30] Iran Standard Time</option>
<option value="4">[UTC + 4] Gulf Standard Time, Samara Standard Time</option>
<option value="4.5">[UTC + 4:30] Afghanistan Time</option>
<option value="5">[UTC + 5] Pakistan Standard Time, Yekaterinburg Standard Time</option>
<option value="5.5">[UTC + 5:30] Indian Standard Time, Sri Lanka Time</option>
<option value="5.75">[UTC + 5:45] Nepal Time</option>
<option value="6">[UTC + 6] Bangladesh Time, Bhutan Time, Novosibirsk Standard Time</option>
<option value="6.5">[UTC + 6:30] Cocos Islands Time, Myanmar Time</option>
<option value="7">[UTC + 7] Indochina Time, Krasnoyarsk Standard Time</option>
<option value="8">[UTC + 8] Chinese Standard Time, Australian Western Standard Time, Irkutsk Standard Time</option>
<option value="8.75">[UTC + 8:45] Southeastern Western Australia Standard Time</option>
<option value="9">[UTC + 9] Japan Standard Time, Korea Standard Time, Chita Standard Time</option>
<option value="9.5">[UTC + 9:30] Australian Central Standard Time</option>
<option value="10">[UTC + 10] Australian Eastern Standard Time, Vladivostok Standard Time</option>
<option value="10.5">[UTC + 10:30] Lord Howe Standard Time</option>
<option value="11">[UTC + 11] Solomon Island Time, Magadan Standard Time</option>
<option value="11.5">[UTC + 11:30] Norfolk Island Time</option>
<option value="12">[UTC + 12] New Zealand Time, Fiji Time, Kamchatka Standard Time</option>
<option value="12.75">[UTC + 12:45] Chatham Islands Time</option>
<option value="13">[UTC + 13] Tonga Time, Phoenix Islands Time</option>
<option value="14">[UTC + 14] Line Island Time</option>
使用PHP,我没有最简单的选项来将这些转换为时区缩写,我唯一的选项是通过编程来完成,通过一个大约400个时区缩写的列表进行排序。有没有人知道下拉列表中的每一个时区是什么,以及夏令时是什么?(我假设我需要手动定义这两个列表)
编辑:将此列表解析为每个时区的一个缩写,但它们不是“流行”的。
我的新列表
[-12] => kwat
[-11] => bst
[-10] => ahst
[-9.5] => ckhst
[-9] => ahdt
[-8] => akdt
[-7] => east
[-6] => cst
[-5] => act
[-4.5] => ant
[-4] => acst
[-3.5] => negt
[-3] => adt
[-2] => addt
[-1] => azost
[-0] => azomt
[1] => bst
[2] => bdst
[3] => amt
[3.5] => irst
[4] => adt
[4.5] => aft
[5] => aktt
[5.5] => ist
[5.75] => npt
[6] => aktst
[6.5] => burt
[7] => almst
[8] => bnt
[8.75] => cwst
[9] => cdt
[9.5] => cast
[10] => chost
[10.5] => cst
[11] => anat
[11.5] => lhst
[12] => anast
[12.75] => chast
[13] => anast
[14] => anast
代码:
$abbr = DateTimeZone::listAbbreviations();
$offsets=array('-12','-11','-10','-9.5','-9','-8','-7','-6',
'-5','-4.5','-4','-3.5','-3','-2','-1','-0','1','2','3','3.5',
'4','4.5','5','5.5','5.75','6','6.5','7','8','8.75','9','9.5',
'10','10.5','11','11.5','12','12.75','13','14');
$new = array();
$count = 0;
$found = false;
while($count < count($offsets))
{
foreach($abbr as $k => $v)
{
foreach($v as $tz)
{
if($tz['offset'] == $offsets[$count]*3600)
{
$new[$offsets[$count]] = $k;
$found = true;
break;
}
}
if($found)
{
$found = false;
break;
}
}
$count++;
}
print_r($new);
什么是“标准”时区缩写?
对此没有标准。时区缩写不是由任何人正式协调的。有一些在IANA的TZDB中使用,但很多都是随机选择的。对于应该使用哪些缩写,经常有争论。例如,看看2013年4月的列表档案中有多少关于澳大利亚缩略语的帖子。
另一个时区缩写列表可以在这里找到。如果你仔细看,你会发现很多是模棱两可的。例如,cst
可以是“中央标准时间”(美国)、“中国标准时间”或“古巴标准时间”。est
可以是“东部标准时间”(美国)或“东部标准时间”(澳大利亚)。
另一个非常常见的例子是,有些人使用hast
表示夏威夷,而其他人使用hst
是因为他们不太关心阿拉斯加的阿留申群岛(这是a
应该表示的)。
关键是,任何时区缩写的列表,无论你在哪里找到一个,都是主观的和固执己见的。没有标准。
我正在使用此下拉列表为应用程序存储时区(按偏移量):
我现在意识到了这一点,但是我的应用程序逻辑的其余部分已经以这种方式依赖于它了,我只有今天的时间来完成它,所以没有时间来改变它。
那么许多错误将继续存在于您的应用程序中。你不能可靠地做到这一点--即使你的应用程序只是在美国运行。不管您使用的是什么语言或平台,任何这样做的实现都会有很多转换错误。
我可以对这些数组进行硬编码,我只是不知道美国以外的流行区是什么,我想这样的列表可能已经存在了。
至于什么是“流行”--这也是很主观的。由于这样或那样的原因,TZDB中的区域都在那里。我知道的唯一一个试图限制这一点的地方是Ruby on Rails中的ActiveSupport::TimeZone。它们声称有一个“146个区域的有意义的子集”,您可以在该页面的mapping
常量中看到。但是他们没有说他们是通过什么过程来决定什么是有意义的,而且有明显的疏漏。除非你知道你的每一个用户的位置,否则我不会试图决定限制在什么区域。
如果您的目标不是TZDB中所有578个区域的下拉列表,您可以尝试以下方法之一:
>
显示两个下拉列表。首先选择一个国家。第二个是在该国境内选择一个区域。在PHP中,可以看到当您调用DateTimeZone::ListIdentifiers
时,它接受一个可选的$Country
参数来筛选列表。
例如,它可能如下所示:
https://imgs.xnip.cn/cj/n/32/b3efdaf9-e206-4304-a3cd-4f466cd68d6c.png" width="100%" height="100%" />
请注意,这里显示的是edt
的TZDB缩写--这只是为了方便显示。在引擎盖下,您正在选择一个值,如america/new_york
。
最终,您需要为每个用户保存的是他们的IANA时区键,例如america/new_york
。仅使用-5
值无法进行正确的时区转换,因为您没有关于何时转换为-4
的所有规则。
有一件事我从你最初的帖子中没有意识到,但你在评论中澄清了,那就是你正在用这个来选择一个目标事件时区。我想我应该先问一下上下文。我是从为用户选择一个时区的角度来处理这个问题的,而不是为特定事件选择一个特定时区。
要使一个事件处于正确的时刻,您真正需要的只是该时刻的偏移量。所以你可以使用一个下拉列表,就像你在问题中显示的那样--但我会省略任何区域名称。它基本上是从UTC-12:00
到UTC+14:00
的偏移列表。看起来您已经确定了一些30分钟和45分钟的偏移也存在。如果你愿意,可以在这里验证你的假设。
然而,普遍的问题是,许多人不知道抵消应该是多少。通过为每个区域名称放入一个带有标准偏移量的列表,您可能会误导用户选择错误的偏移量。例如,他们可能在谈论一个夏天的日期,该日期应该落在美国东部夏令时(-4),但他们选择了-5选择,因为他们看到了“东部”。所以删除这些名字会有帮助。
例如,我可以选择America/New_York
,并选择2013年11月3日上午1:00。由于回落过渡,有两种不同的情况(一种在-4的EDT中,另一种在-5的EST中)。所以你的应用程序需要检查这一点,并询问用户他们指的是哪一个。同样地,如果我输入2013年3月10日凌晨2点,你的应用程序应该告诉我这个时间不存在于那个区域(由于前春转换)。
对于这两种方法,当涉及到实际存储事件时间时,请确保存储日期-时间-偏移量组合,或者应用偏移量获得UTC的日期-时间。你不希望有任何关于事件所代表的实际时间时刻的问题。
问题内容: 我正在使用此下拉列表按UTC偏移量存储时区: 使用PHP,我实际上没有最简单的选项将它们转换为时区缩写,我唯一以编程方式进行选择的方法是对约400个时区缩写进行排序。有人知道每个时区是什么以及夏时制进行时它们是什么的下拉列表吗?(我假设我需要手动定义两个列表) 编辑:将每个时区的此列表解析为单个缩写,但是它们没有“受欢迎”的缩写。 我的新清单 Code: 问题答案: 什么是“标准”时区
我使用下面的下拉列表按UTC偏移量存储应用程序的时区: 使用PHP时,我并没有最简单的方法将这些转换为时区缩写,我唯一的编程方法就是对大约400个时区缩写列表进行排序。有人知道这个下拉列表中的每个时区是什么吗,以及夏令时是什么吗?(我假设我需要手动定义这两个列表) 编辑:将这个列表解析为每个时区的一个缩写,但它们不是“流行”的。
统计指标 释义 访问量(IP) 一天之内您网站的独立访问IP数 页面浏览量(PV) 即PageView值,用户每打开1个网站页面,记录1个PV 用户多次打开同一页面PV累计多次 独立访客数(UV) UV即UniqueVistor,独立访客数,指1天内访问某站点的人数,以cookie为依据 1天内同一访客的多次访问只计为1个访客;不同浏览器访问累计+1;一旦清除浏览器缓存,UV将会刷新 新访客(NE
问题内容: 在ICU项目(也现在有一个PHP库)中包含有需要帮助恢复正常UTF-8串类,使搜索时更容易地比较值。 但是,我试图弄清楚这对应用程序意味着什么。例如,在哪种情况下,我想要“规范对等”而不是“兼容性对等”,反之亦然? 问题答案: 规范化归一化 Unicode包括多种编码某些字符(最著名的是重音字符)的方法。规范化规范将代码点更改为规范编码形式。生成的代码点应与原始代码点相同,除非字体或渲
本文向大家介绍什么是数据标准化,为什么要进行数据标准化?相关面试题,主要包含被问及什么是数据标准化,为什么要进行数据标准化?时的应答技巧和注意事项,需要的朋友参考一下 数据标准化是预处理步骤,将数据标准化到一个特定的范围能够在反向传播中保证更好的收敛。一般来说,是将该值将去平均值后再除以标准差。如果不进行数据标准化,有些特征(值很大)将会对损失函数影响更大(就算这个特别大的特征只是改变了1%,但是
既然c 17有了< code>std::byte,我就在寻找一种方法,将读取文件到< code>char的代码转换成读取文件到< code>byte的代码。文件包含字节,而不是一堆整数。 然后我读了这个问题和另一个问题,人们认为把文件读入<code>字节</code>是错误的,把文件读进<code<char>是正确的。 如果< code>byte不是为了访问内存而设计的,那么它的目的是什么呢?正如