首页 > 解决方案 > Dataweave 日期格式为 GMT 时区,夏令时

问题描述

我正在尝试使用 GMT 时区进行日期格式化。但是夏季和冬季时间的偏移量是相同的。它适用于 CET 时区。想知道为什么格林威治标准时间不同?

尝试了以下数据编织

期待

"GMT": 
    "date-GMT-Winter": "2019-12-15T13:00:00+00:00",
    "date-GMT-Summer": "2019-08-15T13:00:00+01:00"

但实际

"GMT": 
    "date-GMT-Winter": "2019-12-15T13:00:00Z",
    "date-GMT-Summer": "2019-08-15T13:00:00Z"
output application/json

var CET_timezone_winter = "2019-12-15T13:00:00" as DateTime >> "CET" as String {format: "xxx"}
var CET_timezone_summer = "2019-08-15T13:00:00" as DateTime >> "CET" as String {format: "xxx"}

var GMT_timezone_winter = "2019-12-15T13:00:00" as DateTime >> "GMT" as String {format: "xxx"}
var GMT_timezone_summer = "2019-08-15T13:00:00" as DateTime >> "GMT" as String {format: "xxx"}
---

{
 'date2': now(),
 "timeZoneOffset-xxx" : now() as String {format: "xxx"},


 'CET':
    {
    'date-CET-Winter': CET_timezone_winter,
    'date-CET-Summer': CET_timezone_summer
    },
'GMT':
    {
    'date-GMT-Winter': GMT_timezone_winter,
    'date-GMT-Summer': GMT_timezone_summer
    }
}

标签: dataweave

解决方案


夏令时不适用于 GMT(或 UTC)

https://www.timeanddate.com/time/gmt-utc-time.html

UTC 和 GMT 都不会改变夏令时 (DST)。但是,一些使用 GMT 的国家/地区会在其 DST 期间切换到不同的时区。

例如,英国全年不使用 GMT,它在夏季使用比 GMT 早一小时的英国夏令时 (BST)。

如果您想获得全年的英国/伦敦时间(格林威治标准时间和夏令时的夏令时),您可以使用以下 Dataweave(我添加了新字段进行比较)

output application/json

var CET_timezone_winter = "2019-12-15T13:00:00" as DateTime >> "CET" as String {format: "xxx"}
var CET_timezone_summer = "2019-08-15T13:00:00" as DateTime >> "CET" as String {format: "xxx"}

var GMT_timezone_winter = "2019-12-15T13:00:00" as DateTime >> "GMT" as String {format: "xxx"}
var GMT_timezone_summer = "2019-08-15T13:00:00" as DateTime >> "GMT" as String {format: "xxx"}

var london_timezone_winter = "2019-12-15T13:00:00" as DateTime >> "Europe/London" as String {format: "xxx"}
var london_timezone_summer = "2019-08-15T13:00:00" as DateTime >> "Europe/London" as String {format: "xxx"}
---

{
 'date2': now(),
 "timeZoneOffset-xxx" : now() as String {format: "xxx"},


 'CET':
    {
    'date-CET-Winter': CET_timezone_winter,
    'date-CET-Summer': CET_timezone_summer
    },
'GMT':
    {
    'date-GMT-Winter': GMT_timezone_winter,
    'date-GMT-Summer': GMT_timezone_summer
    },
'London': {
    'date-London-Winter': london_timezone_winter,
    'data-London-Summer': london_timezone_summer

}   

}

输出为 JSON:

{
  "date2": "2019-09-24T15:25:17.574Z",
  "timeZoneOffset-xxx": "+00:00",
  "CET": {
    "date-CET-Winter": "2019-12-15T14:00:00+01:00",
    "date-CET-Summer": "2019-08-15T15:00:00+02:00"
  },
  "GMT": {
    "date-GMT-Winter": "2019-12-15T13:00:00Z",
    "date-GMT-Summer": "2019-08-15T13:00:00Z"
  },
  "London": {
    "date-London-Winter": "2019-12-15T13:00:00Z",
    "data-London-Summer": "2019-08-15T14:00:00+01:00"
  }
}

推荐阅读