¿Qué significa este formato T00: 00: 00.000Z?

Respuestas:

84

Es parte de la representación de fechas ISO-8601 . Está incompleto porque una representación de fecha completa en este patrón también debe contener la fecha:

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

Si intenta analizar esta fecha tal como está, recibirá un Invalid Dateerror:

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

Entonces, supongo que la forma de analizar una marca de tiempo en este formato es concatizar con cualquier fecha

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

Luego puede extraer solo la parte que desee (parte de marca de tiempo)

var d = new Date('2015-03-04T00:00:00.000Z');
console.log(d.getUTCHours()); // Hours
console.log(d.getUTCMinutes());
console.log(d.getUTCSeconds());
nanndoj
fuente
2
Cerrar - usted debe utilizar getUTCHours, getUTCMinutesy getUTCSeconds. De lo contrario, está transmitiendo el comportamiento de la zona horaria local, que producirá resultados diferentes según la zona horaria y la fecha que elija, debido al horario de verano.
Matt Johnson-Pint
12

Le sugiero que lo use moment.jspara esto. En moment.js puedes:

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

ahora que tiene el formato correcto por un tiempo, analícelo si es válido:

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

y para obtener partes de tiempo, puede hacer algo como:

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

Más información sobre momentjs http://momentjs.com/

ido43v3r
fuente
2
Debería poder analizar esto directamente en el constructor de momento con una cadena de formato adecuada. (el momento asumirá la fecha actual si no es parte del valor). Además, puede considerar moment.utc(...)que el valor resultante esté en la misma zona UTC que el valor original.
Matt Johnson-Pint
3

Como ya puede haber sugerido una persona,

Pasé la cadena de fecha ISO 8601 directamente al momento como tal ...

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

o

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

cualquiera de estas soluciones le dará el mismo resultado.

`console.log(moment('2019-11-03T05:00:00.000Z').utc().format('MM/DD/YYYY')) // 11/3/2019`
ese_desarrollador
fuente
Sería bueno también vincular y recomendar el uso de la biblioteca javascript moment.js claramente mientras se explica el código anterior.
VKen
Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente reputación , podrá comentar en cualquier publicación ; en su lugar, proporcione respuestas que no requieran aclaración por parte del autor de la pregunta . - De la revisión
Phil Tune
@PhilTune tiene razón, creo que mi cerebro se movía tan rápido que técnicamente respondía al comentario y no a la pregunta
that_developer
1

Utilice DateTimeFormatter en ISO_DATE_TIME = DateTimeFormatter.ISO_DATE_TIME; lugar deDateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss") o cualquier patrón

Esto solucionó mi problema a continuación

java.time.format.DateTimeParseException: el texto '2019-12-18T19: 00: 00.000Z' no se pudo analizar en el índice 10

Shahid Hussain Abbasi
fuente
Ha resuelto mi problema con la conversión de tiempo de tipo de cadena a OffsetDateTime
RSH