Закрыть - Вы должны использовать getUTCHours, getUTCMinutesи getUTCSeconds. В противном случае вы передаете поведение местного часового пояса, которое даст разные результаты в зависимости от того, какой часовой пояс и какую дату вы выберете - из-за DST.
Мэтт Джонсон-Пинт,
14
Я предлагаю вам использовать moment.jsдля этого. В moment.js вы можете:
var localTime = moment().format('YYYY-MM-DD'); // store localTimevar 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"));
Вы должны иметь возможность анализировать это непосредственно в конструкторе момента с соответствующей строкой формата. (moment примет текущую дату, если она не является частью значения.) Кроме того, вы можете подумать, moment.utc(...)что результирующее значение находится в той же зоне UTC, что и исходное значение.
Мэтт Джонсон-Пинт,
4
Как уже мог предположить один человек,
Я прошел строку даты ISO 8601 прямо в момент, вот так ...
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")
или любой шаблонЭто устранило мою проблему ниже
источник