javascript - 将 dateTime 字符串解析为 UTC
问题描述
在我尝试过的每个日期时间库中,时区一直是个痛点。所以这里的问题是,假设你有一个 UTC 日期时间作为字符串提供:2019-06-25T05:00:00Z
。您如何从中创建一个 UTC DateTime 对象(我使用 luxon,但答案可以是任何库)?
console.info(luxon.DateTime.fromISO('2019-06-25T05:00:00Z').toSQL());
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>
当我运行上面的代码片段时,我得到:
2019-06-25 09:00:00.000 +04:00 // local timezone
虽然我需要:
2019-06-25 05:00:00.000 -00:00 // UTC
解决方案
三个选项供您选择:
1) Luxon 的文档说你可以用来fromISO
从中获取DateTime
。这可以正确解析字符串。看起来要按照您想要的方式格式化,您必须告诉它使用区域 UTC,但那是因为它在输出上格式化:
const {DateTime} = luxon;
console.info(DateTime.fromISO('2019-06-25T05:00:00Z', { zone: "UTC"}).toSQL());
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>
您也可以使用setZone("UTC")
.fromISO
2) JavaScript 的内置Date
对象会将其解析为 UTC ( new Date(yourString)
),因为它是spec 中定义的格式。然后,您可以使用其上的 UTC 方法来获取 UTC 信息(getUTCHours
等),或者您可以使用其上的本地日期/时间方法来获取本地信息(getHours
等)。您还可以toISOString
用来获取 UTC 字符串:
console.info(new Date('2019-06-25T05:00:00Z').toISOString());
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>
3) Moment也很乐意这样做。
console.info(moment.utc('2019-06-25T05:00:00Z').toISOString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>
如果您需要+00:00
代替Z
,您可以使用replace
它,或者使用 Luxon 或 Moment 他们提供完整的格式选项。
推荐阅读
- mongodb - 如何在更新时重写模型中的嵌套对象
- c# - ASP.NET Core 中 Redis 中频道的订阅方法
- python-3.x - 如何通过 python anaconda 安装 dltpy 库
- database - PostgreSQL 中 Cassandra 的 TimeUUID 的替代方案,支持关系操作
- visual-studio - VS 2019/TFS Shell 扩展:未显示在 Windows 上下文菜单中
- hadoop - 根据 hdfs 中的模式列出文件名
- c# - 使用 BaseAdapter 到 Listview.Adapter 的 JSON 内容对象
- algorithm - 有多少数字同时被响铃和交叉?
- apache-spark - 纱线客户端:用户类抛出异常:java.lang.NoClassDefFoundError:org/apache/spark/sql/DataFrame
- python - 如何取消挂起的 wait_for