DataWeave夏令时场景下动态获取PST时区当日0点的实现问题
问题根源
你原有代码的核心问题是硬编码了UTC时间为T07:00:00Z,固定按UTC-8的偏移计算太平洋时区时间,没有考虑夏令时期间太平洋时区会切换为UTC-7的PDT,偏移量变化导致时间计算出错。同时你用的PST是固定UTC-8的时区缩写,本身不支持夏令时自动切换。
解决方案
不要手动拼接固定偏移的UTC时间,改用带地理信息的时区ID自动适配夏令时,直接在目标时区完成取当日日期、设置0点的操作,正确代码如下:
%dw 2.0 output application/json // 用地理时区ID,自动适配夏令时/冬令时 var targetTimezone = 'America/Los_Angeles' // 先转目标时区取当前日期,再拼接当日0点时间 var targetMidnight = (now() >> targetTimezone) as Date ++ |00:00:00| --- { fromDate: targetMidnight as String {format: "yyyy-MM-dd'T'HH:mm:ssXXX"}, toDate: targetMidnight as String {format: "yyyy-MM-dd'T'HH:mm:ssXXX"} }
效果说明
- 冬令时时段输出和你期望的完全一致,例如
2021-11-10T00:00:00-08:00 - 夏令时时段自动输出对应偏移的当日0点,例如
2024-06-10T00:00:00-07:00,不会再出现前一天23点的问题
内容的提问来源于stack exchange,提问作者user12277274
相关产品推荐
相关产品推荐

