我正在获取一个要与Carbon一起解析的字符串,并指定UTC的时区。然后,我将时区切换为America / Denver并输出格式化的字符串,并且时间值未更改。我究竟做错了什么?我到处搜索,阅读的所有内容都表明这应该可行。
$date = Carbon::parse('2018-08-19 10:43:15', 'UTC');
Log::info($date->timezone->getName());
Log::info($date->format('n/j/y g:i A'));
$date->setTimezone('America/Denver');
Log::info($date->timezone->getName());
Log::info($date->format('n/j/y g:i A'));
我的日志返回:
[2018-08-19 11:23:17] local.INFO: UTC
[2018-08-19 11:23:17] local.INFO: 8/19/18 10:43 AM
[2018-08-19 11:23:17] local.INFO: America/Denver
[2018-08-19 11:23:17] local.INFO: 8/19/18 10:43 AM
答案 0 :(得分:0)
没有代码错误。这是一台CentOS 7服务器。当我更改时区时,我将UTC文件复制到/ etc / localtime,覆盖了/ usr / shared / zoneinfo中当前符号链接的America / Denver文件。正确的过程是删除/ etc / localtime的符号链接,并重新创建它指向正确的时区文件。由于我的America / Denver文件已被UTC文件覆盖,因此服务器返回的America / Denver时间为UTC。
我的解决方案是从另一台服务器复制America / Denver文件,并覆盖损坏的America / Denver文件。这解决了我的问题。