改变碳对象的时区

Changing Timezone of Carbon Object

我正在使用 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'));

我的日志returns:

[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  

没有代码错误。这是一个 CentOS 7 服务器。当我更改时区时,我将 UTC 文件复制到 /etc/localtime,覆盖了 /usr/shared/zoneinfo 中当前符号链接的 America/Denver 文件。正确的程序是删除 /etc/localtime 的符号链接并重新创建它指向正确的时区文件。因为我的 America/Denver 文件已被 UTC 文件覆盖,所以服务器返回 America/Denver 次作为 UTC。

我的解决方案是从另一台服务器复制 America/Denver 文件并覆盖损坏的 America/Denver 文件。这解决了我的问题。