我希望能够将这个问题及其答案作为处理夏令时的权威指南,特别是处理实际的变更问题.
如果您有任何要添加的内容,请执行此操作
许多系统依赖于保持准确的时间,问题在于由于夏令时改变时间 - 向前或向后移动时钟.
例如,在订单获取系统中有一个业务规则取决于订单的时间 - 如果时钟发生变化,规则可能不那么明确.如何保持订单的时间?当然有无数的场景 - 这只是一个说明性的场景.
同样重要的是,如果不是这样的话:
我会对编程,操作系统,数据持久性和该问题的其他相关方面感兴趣.
一般答案很好,但我也希望看到细节,特别是如果它们只在一个平台上可用.
我正在寻找一种方法来生成时区列表,以便在使用PHP生成时区的下拉列表中显示<select>
$list = DateTimeZone::listAbbreviations();
$idents = DateTimeZone::listIdentifiers();
$data = $offset = $added = array();
foreach ($list as $abbr => $info) {
foreach ($info as $zone) {
if ( ! empty($zone['timezone_id'])
AND
! in_array($zone['timezone_id'], $added)
AND
in_array($zone['timezone_id'], $idents)) {
$z = new DateTimeZone($zone['timezone_id']);
$c = new DateTime(null, $z);
$zone['time'] = $c->format('H:i a');
$data[] = $zone;
$offset[] = $z->getOffset($c);
$added[] = $zone['timezone_id'];
}
}
}
array_multisort($offset, SORT_ASC, $data);
$options = array();
foreach ($data as $key => $row) {
$options[$row['timezone_id']] …Run Code Online (Sandbox Code Playgroud) 所以我有一个带注释功能的站点,其中注释的时间戳存储在MySQL数据库中.据我所知,时间戳在存储时转换为UTC,然后在检索时转换回默认时区.就我而言,我的服务器处于中央夏令时时区(CDT).
我计划通过报名表从每个用户获取时区.我只是想知道如何将TIMESTAMP值转换为用户的时区.
$userTimezone = new DateTimeZone($userSubmittedTimezoneString); $myDateTime = new DateTime($storedTimestamp, $userTimezone);
......还是不正确?
使用国家/地区名称或城市名称在国家/地区获取时间(如果国家/地区有多个时区,可以获得更准确的时间)
例如
echo get_local_time('England'); //8:23pm
echo get_local_time('New York'); //7:23am
Run Code Online (Sandbox Code Playgroud)
这可能纯粹用PHP /那里有任何API吗?
我正在尝试获取所有时区。我所做的是:
$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)
您可以在此处查看示例