Domanda

Ho bisogno di un metodo per convertire GregorianCalendar oggetto per ora Unix (vale a dire un lungo). Anche bisogno di un metodo per convertire Unix Time (lungo) di nuovo a GregorianCalendar oggetto. Ci sono metodi là fuori che fa questo? Se no, allora come posso farlo? Qualsiasi aiuto sarebbe molto apprezzato.

Link a GregorianCalendar Class -> http : //download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html

Grazie.

È stato utile?

Soluzione

I metodi getTimeInMillis() e setTimeInMillis(long) vi permetterà di ottenere e impostare il tempo in millisecondi, che è il tempo unix moltiplicato per 1000. Si dovrà regolare manualmente da tempo unix non include millisecondi -. Solo pochi secondi

long unixTime = gregCal.getTimeInMillis() / 1000;
gregCal.setTimeInMillis(unixTime * 1000);

A parte : se si utilizza un sacco date nell'applicazione, soprattutto se si sta convertendo date o utilizzando più fusi orari, mi raccomando utilizzando il biblioteca JodaTime . E 'molto completo e un po' più naturale da capire che il sistema di calendario che viene fornito con Java.

Altri suggerimenti

Credo che GregorianCalendar .getTimeInMillis () e GregorianCalendar.SetTimeInMillis () vi permetterà di ottenere e impostare lungo i valori nel modo desiderato.

Controlla le setTimeInMillis e getTimeInMillis funzioni: http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html#getTimeInMillis ()

Calendar.getTimeInMillis () dovrebbe essere quello che stai cercando.

tl; dr

myGregCal.toZonedDateTime().toEpochSecond()                     // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`.

E andando nella direzione opposta ...

GregorianCalendar.from(                                         // Convert from modern `ZonedDateTime` to troublesome legacy class `GregorianCalendar`.
    Instant.ofEpochSecond( yourCountOfWholeSecondsSinceEpoch )  // Moment in UTC.
        .atZone(                                                // Apply `ZoneId` to `Instant` to produce a `ZonedDateTime` object.
            ZoneId.of( "Africa/Tunis" ) 
        )
)                                                              

Evitare legacy classi data-ora

Le altre risposte sono corrette e di breve. Ma, FYI, le classi data-ora vecchi problematici, come java.util.Date , java.util.Calendar e java.text.SimpleDateFormat sono ora eredità , soppiantato dal java.time classi integrato in Java 8 & 9. Java

Quindi, ecco come convertire e utilizzare le classi moderne, invece, per il vostro problema.

java.time

Converti dal GregorianCalendar classe di eredità al moderno ZonedDateTime di classe. Chiamare nuovi metodi aggiunti alle vecchie classi.

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;

E andando nella direzione opposta ...

GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;

Se da “tempo Unix” si intende un conteggio di interi secondi dal momento che la di riferimento dell'epoca di primo istante del 1970 in UTC, 1970-01-01T00: 00: 00Z , quindi chiamare toEpochSecond.

long secondsSinceEpoch = zdt.toEpochSecond() ;

Se si intende un conteggio di millisecondi dal 1970 iniziato in UTC, poi estrarre un Instant. Il Instant classe rappresenta un momento sulla timeline in UTC con una risoluzione di nanosecondi (fino a nove (9) cifre di una frazione decimale).

Instant instant = zdt.toInstant() ;

chiedere il conteggio di millisecondi .

long millisecondsSinceEpoch = instant.toEpochMill() ;

Tieni presente che chiedere sia per interi secondi o millisecondi può comportare la perdita di dati. Il ZonedDateTime e Instant sia volontà di nanosecondi. Quindi, qualsiasi microsecondi o nanosecondi che possono essere presenti verrà ignorato come si conta tutta la vostra secondi o millisecondi .


A proposito di java.time

Il java.time quadro è costruito in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidioso legacy classi data-time come java.util.Date , Calendar , e SimpleDateFormat .

Il Joda Time progetto , ora in < a href = "https://en.wikipedia.org/wiki/Maintenance_mode" rel = "nofollow noreferrer"> modalità manutenzione , consigliati migrazione al java.time classi .

Per ulteriori informazioni, vedere la Oracle Esercitazione . E cercare Stack Overflow per molti esempi e spiegazioni. Le specifiche sono JSR 310 .

Utilizzando un driver JDBC compatibile con JDBC 4.2 o poi, si può scambiare java.time oggetti direttamente con il database. Non c'è bisogno di corde né java.sql. * Classi.

Dove ottenere le classi java.time?

Il ThreeTen-Extra progetto estende java.time con classi aggiuntive. Questo progetto è un banco di prova per eventuali future integrazioni java.time. Si possono trovare alcune classi utili, come per esempio Interval , YearWeek , YearQuarter , e informazioni .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top