【问题标题】:Date parsing and when to use utc/TimeUnits in Vega Lite?日期解析以及何时在 Vega Lite 中使用 utc/TimeUnits?
【发布时间】:2021-01-26 21:12:51
【问题描述】:

我试图了解 Vegalite 中的日期解析是如何工作的。具体来说,我对默认时区假设和从非时区表示的字符串进行日期解析的理解有点困惑。

考虑一个可行的最小示例

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {
    "values": [
      {"date": "2020-10-01", "distance": 1},
      {"date": "2020-11-01", "distance": 5}
    ]
  },
  "mark": "bar",
  "encoding": {
    "x": {"field": "date", 
          "type": "temporal",  
          "timeUnit": {"unit": "yearmonthdate", "utc": true},
          "axis": {"format": "%b. %y"}
          },
    "y": {"field": "distance", "aggregate": "sum"}
  }
}

在上面的例子中,如果我省略了这一行(或者只是 utc 标志):

"timeUnit": {"unit": "yearmonthdate", "utc": true}

日期似乎被解析为:

Wed, 30 Sep 2020 05:00:00 GMT   
Sat, 31 Oct 2020 05:00:00 GMT   

任何关于此处默认假设的指导或解释都会非常有帮助。我从给定非 ISO 字符串输入的文档中了解到,Vega 会将时间解析为本地 (https://vega.github.io/vega-lite/docs/timeunit.html#utc) 但这里似乎不是这种情况?

谢谢

【问题讨论】:

    标签: vega-lite vega


    【解决方案1】:

    关于 Vega/Vega-Lite 如何处理日期,有两件重要的事情需要了解:

    1. 除非另有说明(例如,通过将 "utc": true 传递给 timeUnit),否则日期始终以当地时间显示
    2. 使用标准 javascript 日期解析来解析日期。

    为什么#2 很重要?好吧,因为 Javascript 日期解析根据输入日期的格式假定不同的时区,而使用的时区甚至可以取决于您使用的浏览器! (在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#Description 阅读比您想知道的更多信息)

    提炼的摘要是完整的 ISO 日期字符串(在所有浏览器上)将被解析为本地时间(我在设置为 PDT 的计算机上运行它):

    > new Date("2020-10-01T00:00:00")
      Thu Oct 01 2020 00:00:00 GMT-0700 (Pacific Daylight Time)
    

    而部分日期或时间戳(在大多数浏览器上)将被解析为 UTC 时间:

    > new Date("2020-10-01")
      Wed Sep 30 2020 17:00:00 GMT-0700 (Pacific Daylight Time)
    

    这意味着,如果您将非 ISO 时间字符串传递给 Vega-Lite,则必须在轴上使用 UTC 时间单位才能在 vega/vega-lite 图表中看到正确的数据表示。如果不这样做,日期将解析为 UTC 时间并以本地时间显示,产生的偏移量等于用于查看可视化的浏览器的时区偏移量。

    【讨论】:

    • 快速附录...这似乎也是工具提示中要考虑的问题。不幸的是,我似乎无法像在编码中那样纠正问题:"tooltip": [ "field": "date", "title": "Date", "format": null, "type": "temporal", "timeUnit": { "unit": "yearmonthdate", "utc": true } } ]
    • 我认为这是一个错误。如果您愿意的话,值得报告 Vega-Lite 问题跟踪器。
    • 会的。 FWIW(对于任何阅读本文的人),我设法通过更改工具提示的比例来解决我的直接问题:``` “field”:“date”,“title”:“Date”,“format”:null,“ type": "temporal", "scale": { "type": "utc" }``` - 我仍然会报告这个问题,因为我有点困惑为什么会这样;但它似乎确实为任何寻求短期解决方案的人解决了这个问题
    猜你喜欢
    • 2020-08-13
    • 2021-05-25
    • 2011-11-20
    • 1970-01-01
    • 2016-05-22
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多