Linux系统中没有PRC解决办法

其实很早之前在使用PHP的时候,就碰到过PHP Fatal error:  Uncaught ErrorException: date_default_timezone_set(): Timezone ID 'PRC' is invalid in xxx的错误,查了很多资料,都没有找到解决办法。大家都推荐使用Asia/Shanghai,而我也一直习惯性使用Asia/Shanghai。

当我们在PHP官网查询支持的时区的时候,在Asia中也找不到PRC项,所以一直以为是高PHP版本不支持PRC的原因,其实PRC是在Other下。

后来又接手了一个老项目,老项目中大量使用了PRC,如果全改成Asia/Shanghai不现实,因为其中有些包也在使用。而其他人相同的PHP版本就可以使用,我的环境就不行,所以我感觉应该是我的环境有问题。

百般查询调整后,终于找到了原因:在我的Linux系统时区的文件夹(/usr/share/zoneinfo)下没有PRC项。

找到问题就好解决了,看了一下UTC是使用了软链指向Etc/UTC,同理PRC也可以使用软链:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/PRC

这里我软链到Asia/Shanghai,当然你也可以软链到Etc/GMT-8(在Linux中,Etc/GMT-8==GMT+8==UTC+8)

评论