你的服务、游戏或应用程序在2月29日出现问题了吗?

今年是闰年,所以2月有29天,纵使闰年是可以计算的,但还是有许多服务或程序没能妥善处理少见的2月29日,而出现各种情况,微软软件工程师Matt Johnson即在自己的博客中整理了相关问题,例如美国电信企业Sprint的用户,在2月29日时,手机依然显示2月28日。

或者是游戏流媒体服务Shadow的用户,在世界标准时间(UTC)的2月29日凌晨时,无法通过Windows计算机登录该服务。

其中,Sprint要求用户手动将手机日期设置为2月29日,而Shadow则要求用户关闭Windows的时间同步功能,并把时间往后设为3月1日。

而零用钱管理程序Gohenry也出现了同样的闰年bug,家长原本定期要发给小孩的零用钱,在2月29日这一天竟然没有入帐。

以及TP-Link智能插座原本有一个网页版的电力使用监控仪表板,结果用户在3月1日时发现,整个2月份的报表都不见了,猜测也是受到闰年的影响。

还有Python的synapse、timestring及aioftp组件,C语言的日志函数库Stumpless,以及开源的Animal Shelter Manager软件,也都因为无法处理2月29日而出现问题。而若在PHP程序语言中使用了DateTime::createFromFormat,并先写日期再写年份,就会直接跳过2月29日,该bug在2012年的闰年就出现过了,只是一直没有被修补,不过它的解决方法很简单,只要先写年份再写日期就好了。

可能是受到闰年bug的启发,一名YouTuberCarey Holzman在日前警告,假设用户在技嘉(Gigabyte)的主板上安装Windows 10 1909(Windows 10 November 2019 Update),并将主板BIOS的现在时间设到3001年1月18日之后,那么便无法完成Windows 10 1909的安装,并会在重新启动时锁住;而且就算用户更正了主板上的BIOS时间,但Windows依然会把它改为原本设置的时间,于是开机时便会再度锁住。

该bug同时影响支持AMD与Intel的技嘉主板,也可能影响其它任何可将BIOS日期,设置到3001年1月18日以后的主板。

不过,除非用户自行重新设置主板的BIOS日期,否则并不会立即触发该被称为Y3K的bug,媒体则打趣,幸好微软与技嘉还有980年的时间,可以修补该bug。