Was bedeutet dieses Format T00: 00: 00.000Z?

Antworten:

84

Es ist Teil der Datumsdarstellung nach ISO-8601 . Es ist unvollständig, da eine vollständige Datumsdarstellung in diesem Muster auch das Datum enthalten sollte:

2015-03-04T00:00:00.000Z //Complete ISO-8601 date

Wenn Sie versuchen, dieses Datum so zu analysieren, wie es ist, erhalten Sie eine Invalid DateFehlermeldung:

new Date('T00:00:00.000Z'); // Invalid Date

Ich denke, der Weg, einen Zeitstempel in diesem Format zu analysieren, besteht darin, sich auf ein beliebiges Datum zu konzentrieren

new Date('2015-03-04T00:00:00.000Z'); // Valid Date

Dann können Sie nur das gewünschte Teil extrahieren (Zeitstempelteil)

var d = new Date('2015-03-04T00:00:00.000Z');
console.log(d.getUTCHours()); // Hours
console.log(d.getUTCMinutes());
console.log(d.getUTCSeconds());
nanndoj
quelle
2
Close - sollten Sie verwenden getUTCHours, getUTCMinutesund getUTCSeconds. Andernfalls geben Sie das Verhalten der lokalen Zeitzone an, was je nach Zeitzone und ausgewähltem Datum aufgrund der Sommerzeit zu unterschiedlichen Ergebnissen führt.
Matt Johnson-Pint
12

Ich schlage vor, Sie verwenden moment.jsdafür. In moment.js können Sie:

var localTime = moment().format('YYYY-MM-DD'); // store localTime
var proposedDate = localTime + "T00:00:00.000Z";

Nachdem Sie eine Zeit lang das richtige Format haben, analysieren Sie es, wenn es gültig ist:

var isValidDate = moment(proposedDate).isValid();
// returns true if valid and false if it is not.

und um Zeitteile zu erhalten, können Sie etwas tun wie:

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"));

Weitere Informationen zu momentjs http://momentjs.com/

gegangen43v3r
quelle
2
Sie sollten in der Lage sein, dies direkt im Moment-Konstruktor mit einer geeigneten Formatzeichenfolge zu analysieren. (Moment nimmt das aktuelle Datum an, wenn es nicht Teil des Werts ist.) Sie können auch berücksichtigen, moment.utc(...)dass sich der resultierende Wert in derselben UTC-Zone befindet wie der ursprüngliche Wert.
Matt Johnson-Pint
3

Wie eine Person vielleicht bereits vorgeschlagen hat,

Ich habe die ISO 8601- Datumszeichenfolge direkt an einen Moment wie diesen übergeben ...

`moment.utc('2019-11-03T05:00:00.000Z').format('MM/DD/YYYY')`

oder

`moment('2019-11-03T05:00:00.000Z').utc().format('MM/DD/YYYY')`

Mit jeder dieser Lösungen erhalten Sie das gleiche Ergebnis.

`console.log(moment('2019-11-03T05:00:00.000Z').utc().format('MM/DD/YYYY')) // 11/3/2019`
that_developer
quelle
Es wäre gut, auch die Verwendung der Javascript-Bibliothek von moment.js klar zu verlinken und zu empfehlen, während der obige Code erläutert wird.
VKen
Dies gibt keine Antwort auf die Frage. Sobald Sie einen ausreichenden Ruf haben, können Sie jeden Beitrag kommentieren . Geben Sie stattdessen Antworten, die nicht vom Fragesteller geklärt werden müssen . - Aus dem Rückblick
Phil Tune
@PhilTune Sie haben Recht, ich denke, mein Gehirn bewegte sich so schnell, dass ich technisch auf Kommentare antwortete und nicht auf die Frage
that_developer
1

Bitte verwenden Sie DateTimeFormatter ISO_DATE_TIME = DateTimeFormatter.ISO_DATE_TIME; anstelle eines DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss")Musters

Dies hat mein Problem unten behoben

java.time.format.DateTimeParseException: Der Text '2019-12-18T19: 00: 00.000Z' konnte bei Index 10 nicht analysiert werden

Shahid Hussain Abbasi
quelle
Es hat mein Problem mit der Zeitkonvertierung vom Zeichenfolgentyp in OffsetDateTime
RSH