新西兰夏令时切换后Google App Script邮件主题时间异常求助
解决Google App Script夏令时切换后时间显示异常的问题
我明白你遇到的夏令时切换后时间不对的糟心情况——时区相关的bug总能在最关键的时候掉链子,尤其是刚好赶上夏令时变更节点的时候。
咱们来拆解下问题:你现在的代码里硬编码了GMT+12作为时区参数,但新西兰夏令时生效后,本地时区其实是GMT+13(非夏令时才是GMT+12)。固定的GMT偏移值是静态的,不会自动识别夏令时的切换规则,哪怕你项目时区设置正确,代码里手动指定的偏移也会覆盖掉自动调整逻辑,这就是时间显示错误的根源。
给你两个靠谱的解决方案:
方案1:复用项目配置的时区(推荐)
既然你已经把项目时区设成了正确值,直接用Session.getScriptTimeZone()来获取项目时区就行,它会自动处理夏令时的切换。修改后的代码如下:
var date = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd-MM-yyyy' ----------- 'EEEE' ----------- 'hh:mm a' ----------- 'ss:SS' seconds ----------- 'Z'");
方案2:使用时区标识符而非固定偏移
如果一定要手动指定时区,别用GMT偏移,改用新西兰对应的时区标识符Pacific/Auckland——这个标识符内置了该地区的夏令时规则,会自动随季节调整偏移。修改后的代码:
var date = Utilities.formatDate(new Date(), "Pacific/Auckland", "dd-MM-yyyy' ----------- 'EEEE' ----------- 'hh:mm a' ----------- 'ss:SS' seconds ----------- 'Z'");
不管用哪种方案,修改后脚本都应该能正确输出夏令时对应的本地时间(也就是你期望的07:12 PM)。下次遇到时区相关的问题,优先用时区标识符或者项目内置的时区变量,避免硬编码固定偏移值,就能避开夏令时这类坑啦。
内容的提问来源于stack exchange,提问作者shadowz1337
相关产品推荐
相关产品推荐

