2013-07-02 6 views
37

Come posso convertire i minuti dalla data e ora di Unix a data e ora in java. Ad esempio, il timestamp 1372339860 corrisponde a Thu, 27 Jun 2013 13:31:00 GMT.Converti timestamp unix alla data in java

Desidero convertire 1372339860 in 2013-06-27 13:31:00 GMT.

Modifica: In realtà, desidero che corrisponda al fuso orario GMT-4 degli Stati Uniti, quindi sarà 2013-06-27 09:31:00.

+0

'DateTime qualunque = new DateTime (yourunixtimestampaslong * 1000L, DateTimeZone.UTC),' se si usa [JodaTime] (http://joda-time.sourceforge.net/). Oppure 'DateTime whatever = new DateTime (yourunixtimestampaslong * 1000L, DateTimeZone.forOffsetHours (-4));' per il tuo secondo esempio. Javadoc [here] (http://joda-time.sourceforge.net/apidocs/index.html) – fvu

+0

Formato SimpleDateFormat = new SimpleDateFormat ("gg-MM-aaaa HH: mm: ss"); –

risposta

115

È possibile utilizzare SimlpeDateFormat per formattare la data in questo modo:

long unixSeconds = 1372339860; 
// convert seconds to milliseconds 
Date date = new Date(unixSeconds*1000L); 
// the format of your date 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); 
// give a timezone reference for formatting (see comment at the bottom) 
sdf.setTimeZone(TimeZone.getTimeZone("GMT-4")); 
String formattedDate = sdf.format(date); 
System.out.println(formattedDate); 

Il modello che SimpleDateFormat prende se molto flessibile, puoi controllare in javadoc tutte le varianti che puoi utilizzare per produrre una formattazione diversa in base ai pattern che scrivi dato uno specifico Date. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

  • Perché un Date fornisce un metodo getTime() che restituisce i millisecondi dal EPOC, è necessario che si dà a SimpleDateFormat un fuso orario per formattare la data corretta di tronchi con per il fuso orario, altrimenti userà il fuso orario predefinito del JVM (che se ben configurato sarà comunque essere di destra)
+0

Modificato, grazie @fvu –

+2

questa risposta è migliore, perché l'autore fornisce anche un esempio su come rispettare i fusi orari. – drdrej

+1

Eccellente! Btw per ottenere il fuso orario corrente del dispositivo possiamo usare 'TimeZone.getDefault()' – Atul

10

È necessario convertirlo in millisecondi moltiplicando il timestamp dal 1000:

java.util.Date dateTime=new java.util.Date((long)timeStamp*1000); 
+0

nota che la domanda è di convertire i minuti di epoca ad oggi e quindi formattarli in un modello con un fuso orario modificato –

26

Java 8 introduce il metodo Instant.ofEpochSecond di utilità per la creazione di un Instant da un timestamp Unix, questo può quindi essere convertito in un ZonedDateTime e infine formattato, ad esempio:

final DateTimeFormatter formatter = 
    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 

final long unixTime = 1372339860; 
final String formattedDtm = Instant.ofEpochSecond(unixTime) 
     .atZone(ZoneId.of("GMT-4")) 
     .format(formatter); 

System.out.println(formattedDtm); // => '2013-06-27 09:31:00' 

ho pensato che questo potrebbe essere utile per le persone che stanno utilizzando Java 8.

+0

Gran parte di la funzionalità java.time viene backportata su Java 6 e 7 in [ThreeTen-Backport] (http://www.threeten.org/threetenbp/) e ulteriormente adattata a [Android] (https: //en.wikipedia. org/wiki/Android_ (operating_system)) in [ThreeTenABP] (https://github.com/JakeWharton/ThreeTenABP) (vedi [* Come usare ... *] (http://stackoverflow.com/q/38922754/642706)). –

+0

L'esempio di offset da UTC ('GMT-4') è più appropriato per [' OffsetDateTime'] (https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime .html) di 'ZonedDateTime'. Inoltre, ti suggerisco di suddividere il tuo codice di esempio in pezzi per presentare ogni passaggio e ogni idea separatamente. –