有人可以用javascript解释这种格式吗
T00:00:00.000Z
以及如何解析呢?
有人可以用javascript解释这种格式吗
T00:00:00.000Z
以及如何解析呢?
Answers:
它是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`
请使用DateTimeFormatterISO_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'