Después de mucho trabajar pudimos hallar el resultado de esta incógnita que muchos usuarios de nuestra web presentan. Si tienes algún detalle que aportar no dejes de aportar tu conocimiento.
Solución:
tu marca de tiempo 1466769937914
igual a 2016-06-24 12:05:37 UTC
. El problema es que estás multiplicando el timestamp
por 1000. Pero su timestamp
ya tiene un valor en milisegundos, no en segundos (esto false la suposición es probablemente la razón por la que tienes la multiplicación). Como resultado obtienes 1466769937914000
que convertido es igual a 48450-02-01 21:51:54 UTC
. Entonces, técnicamente hablando, todo funciona bien y los resultados que está obteniendo son correctos. Todo lo que necesita corregir son sus datos de entrada y la solución es bastante simple: simplemente elimine la multiplicación:
SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
sfd.format(new Date(timestamp));
Si está buscando obtener una instancia de fecha de la marca de tiempo
Si necesita obtener solo el Date
objeto de Timestamp, la instancia de Timestamp viene con un toDate()
método que devuelve un Date
instancia.
Para mayor claridad:
Date javaDate = firebaseTimestampObject.toDate()
Según la documentación de Firebase, los tipos JSON que están disponibles son:
String
Long
Double
Boolean
Map
List
Citando otra publicación de Stack Overflow, te sugiero que uses Fecha JSON string formatoyyyy-MM-dd'T'HH:mm:ss.SSSZ
en lugar de la marca de tiempo de la época.
Comparando 1335205543511
a 2012-04-23T18:25:43.511Z
puedes notar que:
- Es legible por humanos pero también sucinto.
- Se ordena correctamente
- Incluye segundos fraccionarios, que pueden ayudar a restablecer la cronología.
- Cumple con la norma ISO 8601
ISO 8601 se ha establecido internacionalmente durante más de una década y cuenta con el respaldo de W3C, RFC3339 y XKCD