这种格式是啥意思 T00:00:00.000Z?
Posted
技术标签:
【中文标题】这种格式是啥意思 T00:00:00.000Z?【英文标题】:What does this format means T00:00:00.000Z?这种格式是什么意思 T00:00:00.000Z? 【发布时间】:2015-05-11 01:49:14 【问题描述】:有人可以用javascript解释这种类型的格式
T00:00:00.000Z
以及如何解析它?
【问题讨论】:
en.wikipedia.org/wiki/ISO_8601T
表示“时间”,通常将日期与时间部分分开。 Z
表示以UTC 表示的值
以 Z 结尾的日期时间也称为祖鲁时间。
【参考方案1】:
它是ISO-8601 日期表示的一部分。它是不完整的,因为此模式中的完整日期表示还应该包含日期:
2015-03-04T00:00:00.000Z //Complete ISO-8601 date
如果您尝试按原样解析此日期,您将收到 Invalid Date
错误:
new Date('T00:00:00.000Z'); // Invalid Date
所以,我想以这种格式解析时间戳的方法是与任何日期连接
new Date('2015-03-04T00:00:00.000Z'); // Valid Date
然后你可以只提取你想要的部分(时间戳部分)
var d = new Date('2015-03-04T00:00:00.000Z');
console.log(d.getUTCHours()); // Hours
console.log(d.getUTCMinutes());
console.log(d.getUTCSeconds());
【讨论】:
关闭 - 您应该使用getUTCHours
、getUTCMinutes
和 getUTCSeconds
。否则,您将传递本地时区的行为,这将产生不同的结果,具体取决于您选择的时区和日期 - 由于 DST。【参考方案2】:
我建议您为此使用moment.js
。在 moment.js 中,您可以:
var localTime = moment().format('YYYY-MM-DD'); // store localTime
var proposedDate = localTime + "T00:00:00.000Z";
现在你已经有了正确的格式,如果它是有效的,请解析它:
var isValidDate = moment(proposedDate).isValid();
// returns true if valid and false if it is not.
要获得时间部分,您可以执行以下操作:
var momentDate = moment(proposedDate)
var hour = momentDate.hours();
var minutes = momentDate.minutes();
var seconds = momentDate.seconds();
// or you can use `.format`:
console.log(momentDate.format("YYYY-MM-DD hh:mm:ss A Z"));
关于momentjs的更多信息http://momentjs.com/
【讨论】:
您应该能够使用适当的格式字符串直接在 moment 构造函数中解析它。 (如果它不是值的一部分,则将假定当前日期。)另外,您可以考虑moment.utc(...)
,因此结果值与原始值位于相同的 UTC 区域。
您能告诉我如何从格式化的日期版本转换回原始日期版本 T00:00:00.000Z 吗?
你用这个结果会给你T00:00:00.000Z格式吗?【参考方案3】:
正如某人可能已经建议的那样,
我像这样直接将ISO 8601 日期字符串传递给了时刻......
moment.utc('2019-11-03T05:00:00.000Z').format('MM/DD/YYYY')
或
moment('2019-11-03T05:00:00.000Z').utc().format('MM/DD/YYYY')
这些解决方案中的任何一个都会为您提供相同的结果。
console.log(moment('2019-11-03T05:00:00.000Z').utc().format('MM/DD/YYYY')) // 11/3/2019
关于momentjs的更多信息http://momentjs.com/
【讨论】:
在解释上面的代码时,最好也链接并推荐moment.js javascript库的使用。 这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review @PhilTune 你是对的,我认为我的大脑运转得如此之快,以至于我在技术上是在回复评论而不是问题【参考方案4】:请使用 DateTimeFormatter ISO_DATE_TIME = DateTimeFormatter.ISO_DATE_TIME;
而不是DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss")
或任何模式
这解决了我的问题
java.time.format.DateTimeParseException:无法在索引 10 处解析文本“2019-12-18T19:00:00.000Z”
【讨论】:
解决了我的时间从字符串类型转换为 OffsetDateTime 的问题【参考方案5】:既然有人问如何实现它:
使用momentjs 很容易:
// install using yarn
yarn add moment
// or install using npm
npm i moment
然后您可以这样做以根据您想要的格式提取日期:
import 'moment' from moment;
let isoDate = "2021-09-19T05:30:00.000Z";
let newDate = moment.utc(isoDate).format('MM/DD/YY');
console.log('converted date', newDate); // 09/23/21
let newDate2 = moment.utc(isoDate).format("MMM Do, YYYY");
console.log('converted date', newDate2); // Sept 24, 2021
【讨论】:
以上是关于这种格式是啥意思 T00:00:00.000Z?的主要内容,如果未能解决你的问题,请参考以下文章