Tsignifica "hora" y normalmente separa la fecha del componente de hora. Zsignifica que el valor está en términos de UTC
Matt Johnson-Pint
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:
newDate('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
newDate('2015-03-04T00:00:00.000Z'); // Valid Date
Luego puede extraer solo la parte que desee (parte de marca de tiempo)
var d = newDate('2015-03-04T00:00:00.000Z');
console.log(d.getUTCHours()); // Hoursconsole.log(d.getUTCMinutes());
console.log(d.getUTCSeconds());
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 localTimevar 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"));
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 ...
@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
T
significa "hora" y normalmente separa la fecha del componente de hora.Z
significa que el valor está en términos de UTCRespuestas:
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 Date
error: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());
fuente
getUTCHours
,getUTCMinutes
ygetUTCSeconds
. 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.Le sugiero que lo use
moment.js
para 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/
fuente
moment.utc(...)
que el valor resultante esté en la misma zona UTC que el valor original.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`
fuente
Utilice DateTimeFormatter en
ISO_DATE_TIME = DateTimeFormatter.ISO_DATE_TIME;
lugar deDateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss")
o cualquier patrónEsto solucionó mi problema a continuación
fuente