10

数据源有一个没有偏移量的 ISO-8601 日期时间字段。

例子:2019-07-09T18:45

但是,我知道所讨论的时间被理解为在America/Chicago时区中。

如何获得与 UTC 时间等效的 Luxon DateTime 对象?

我可以 DateTime.fromISO('2019-07-09T18:45').plus({hours: 5})……但这仅在夏令时的半年(如现在)有效。否则偏移量将是.plus({hours: 6})

Luxon 是否具有日期感知(因此 DST 感知)方法可以将特定分区本地时间转换为 UTC?

4

2 回答 2

16

由于您知道输入日期的时区,因此您可以zone在解析时使用该选项。正如fromISO文档所述:

public static fromISO(text: string, opts: Object): DateTime

opts.zone:如果输入字符串本身没有指定偏移量,则使用此区域。

然后您可以使用toUTC将您的 DateTime 转换为 UTC:

将 DateTime 的区域“设置”为 UTC。返回一个新构造的 DateTime。

等效于setZone ('utc')

这是一个现场样本:

const DateTime = luxon.DateTime;
const d = DateTime.fromISO('2019-07-09T18:45', {zone: 'America/Chicago'});
console.log(d.toISO());
console.log(d.toUTC().toISO());
<script src="https://cdn.jsdelivr.net/npm/luxon@1.16.0/build/global/luxon.js"></script>

于 2019-07-08T06:44:46.260 回答
1

您可以参考以下luxon函数:

  1. isInDST https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html#instance-get-isInDST

检查当前时间是否基于夏令时!

  1. toUTC :转换为基于 UTC 的时间的函数

https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html#instance-method-toUTC

于 2019-07-08T05:34:24.593 回答