Может кто-нибудь, пожалуйста, объясните этот тип формата в 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
. В противном случае вы передаете поведение местного часового пояса, которое даст разные результаты в зависимости от того, какой часовой пояс и какую дату вы выберете - из-за DST.
Я предлагаю вам использовать 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