Estoy recibiendo datos de un servidor en segundos y quiero convertirlo hasta la fecha.
Pero los segundos que estoy recibiendo no es desde la época UNIX 01/01/1970, pero es 01/01/2000.
Normalmente yo uso:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
String dateString = formatter.format(new Date(millisToConvert));
Donde millisConvert se convierte-a-milisegundos segundo que recibo. Pero ahora, como es natural, me sale fechas equivocadas desde el origen es diferente. ¿Cómo cambio la época (el origen)?
tl; dr
OffsetDateTime.of( 2000 , 1 , 1 , 0 , 0 , 0 , 0 , ZoneOffset.UTC ) // Define your epoch reference moment.
.pluSeconds( yourSeconds ) // Add the number of seconds given to you. Returns another `OffsetDateTime` object rather than altering the original (immutable objects pattern).
.toLocalDate() // Extract a date-only value without time-of-day and without offset-from-UTC.
java.time
Utilizar las modernas java.time clases que suplantado las clases heredadas viejos terribles tales como Date
y Calendar
.
Instant
Una Instant
representa un momento en UTC.
Definir su referencia época de fecha y hora en particular.
Instant epoch = Instant.parse( "2000-01-01T00:00Z" ) ;
Añadir su número de segundos.
Instant later = epoch.plusSeconds( yourSecondsGoHere ) ;
OffsetDateTime
Si desea un valor de sólo fecha sin la hora del día y sin zona horaria, el uso LocalDate
de clase. En primer lugar, convertir del tipo básico Instant
a la más flexible OffsetDateTime
, especificando la constante ZoneOffset.UTC
como el offset.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
LocalDate
Extraer el valor de fecha-solamente.
LocalDate ld = odt.toLocalDate() ;
sobre java.time
El java.time marco está construido en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como java.util.Date
, Calendar
, y SimpleDateFormat
.
La Joda-Time proyecto, ahora en modo de mantenimiento , asesora a la migración a los java.time clases.
Para obtener más información, consulte el Tutorial de Oracle . Y la búsqueda de desbordamiento de pila durante muchos ejemplos y explicaciones. Especificación es JSR 310 .
Es posible intercambiar java.time objetos directamente con su base de datos. Utilizar un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, sin necesidad de java.sql.*
clases.
Dónde obtener las clases java.time?
- Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 , y más tarde
- Incorporado.
- Parte de la API estándar de Java con una aplicación incluida.
- Java 9 añade algunas características menores y correcciones.
- Java SE 6 y Java SE 7
- Gran parte de la funcionalidad de back-java.time está portado a Java 6 y 7 en ThreeTen-Backport .
- Androide
- Las versiones posteriores de Android de haces de implementaciones de los java.time clases.
- Para anteriormente Android (<26), el ThreeTenABP proyecto adapta ThreeTen-Backport (mencionado anteriormente). Ver Cómo utilizar ThreeTenABP ... .
El ThreeTen-Extra proyecto se extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles futuras adiciones a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
, y más .