这种格式是啥意思 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_8601 T 表示“时间”,通常将日期与时间部分分开。 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());

【讨论】:

关闭 - 您应该使用 getUTCHoursgetUTCMinutesgetUTCSeconds。否则,您将传递本地时区的行为,这将产生不同的结果,具体取决于您选择的时区和日期 - 由于 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?的主要内容,如果未能解决你的问题,请参考以下文章

Unzip是啥意思?

zip是啥意思_zip中文指的是啥

Unix时间戳'120314170138Z'中的'Z'是啥意思?

x?.y?.z 是啥意思?

浮点型数据的精度是啥意思

Python多线程是啥意思?