Чи може хтось, будь ласка, пояснити цей тип формату у javascript
T00:00:00.000Z
І як його проаналізувати?
Чи може хтось, будь ласка, пояснити цей тип формату у javascript
T00:00:00.000Z
І як його проаналізувати?
T
означає "час" і зазвичай відокремлює дату від часової складової. Z
означає, що значення вказане в UTC
Відповіді:
Це частина подання дати 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
. В іншому випадку ви надаєте поведінку місцевого часового поясу, що дасть різні результати залежно від часового поясу та дати, яку ви вибрали - через літній час.
я пропоную вам використовувати 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.utc(...)
що отримане значення знаходиться в тій самій зоні UTC, що і початкове значення.
Як одна людина вже могла припустити,
Я передав рядок дати 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`
Будь ласка, використовуйте 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