Що означає цей формат T00: 00: 00.000Z?


87

Чи може хтось, будь ласка, пояснити цей тип формату у javascript

 T00:00:00.000Z

І як його проаналізувати?



4
Tозначає "час" і зазвичай відокремлює дату від часової складової. Zозначає, що значення вказане в UTC
Метт Джонсон-Пінт

Відповіді:


86

Це частина подання дати 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());

2
Закрити - Ви повинні використовувати getUTCHours, getUTCMinutesі getUTCSeconds. В іншому випадку ви надаєте поведінку місцевого часового поясу, що дасть різні результати залежно від часового поясу та дати, яку ви вибрали - через літній час.
Метт Джонсон-Пінт,

14

я пропоную вам використовувати 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/


2
Ви повинні мати можливість проаналізувати це безпосередньо у конструкторі моменту за допомогою відповідного рядка формату. (момент приймає поточну дату, якщо вона не є частиною значення.) Крім того, ви можете подумати, moment.utc(...)що отримане значення знаходиться в тій самій зоні UTC, що і початкове значення.
Метт Джонсон-Пінт,

4

Як одна людина вже могла припустити,

Я передав рядок дати 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`

Було б також добре чітко зв’язати та рекомендувати використання бібліотеки javascript moment.js , пояснюючи код вище.
VKen

Це не дає відповіді на запитання. Отримавши достатню репутацію, ви зможете коментувати будь-яку публікацію ; натомість надайте відповіді, які не вимагають роз’яснень від запитувача . - З огляду
Phil Tune

@PhilTune ти маєш рацію, я думаю, що мій мозок рухався настільки швидко, що я технічно відповідав на коментар, а не на питання
that_developer

1

Будь ласка, використовуйте DateTimeFormatter ISO_DATE_TIME = DateTimeFormatter.ISO_DATE_TIME; замість DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss")або будь-який шаблон

Це вирішило мою проблему нижче

java.time.format.DateTimeParseException: Текст '2019-12-18T19: 00: 00.000Z' не вдалося проаналізувати за індексом 10


Це вирішило мою проблему з перетворенням часу з типу рядка на OffsetDateTime
RSH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.