Question

Je suis dans le besoin d'une méthode pour convertir GregorianCalendar objet à Unix Time (à savoir une longue). Il faut aussi une méthode pour convertir le temps Unix (long) de retour à GregorianCalendar objet. Y a-t-il des méthodes là-bas que cela ne? Sinon, comment puis-je le faire? Toute aide serait très appréciée.

Lien vers GregorianCalendar classe -> http : //download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html

Merci.

Était-ce utile?

La solution

Les méthodes getTimeInMillis() et setTimeInMillis(long) vous permettra d'et régler l'heure en millisecondes, ce qui est le temps unix multiplié par 1000. Vous devrez régler manuellement depuis le temps unix ne comprend pas millisecondes -. Secondes seulement

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

A part : Si vous utilisez dates beaucoup dans votre application, surtout si vous êtes en train de convertir les dates ou l'utilisation de plusieurs fuseaux horaires, je recommande fortement d'utiliser le la bibliothèque de JodaTime. Il est très complet et un peu plus naturel de comprendre que le système de calendrier qui est livré avec Java.

Autres conseils

Calendar.getTimeInMillis () devrait être ce que vous cherchez.

tl; dr

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

Et aller dans l'autre sens ...

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" ) 
        )
)                                                              

Classes date temps anciens Éviter

Les autres réponses sont correctes et court. Mais, Pour votre information, les classes date de temps anciens gênants tels que java.util.Date , java.util.Calendar et java.text.SimpleDateFormat sont maintenant , supplanté par le java.time classes intégrées dans Java 8 et Java 9.

Voici donc comment convertir et utiliser les classes modernes à la place de votre problème.

java.time

Convertir de la classe héritage GregorianCalendar à la ZonedDateTime de classe moderne. Appel de nouvelles méthodes ajoutées aux anciennes classes.

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;

Et aller dans l'autre sens ...

GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;

Si par « temps Unix » que vous vouliez dire un nombre de secondes entières depuis le référence époque du premier moment de 1970 à UTC, 1970-01-01T00: 00: 00Z , puis appelez toEpochSecond.

long secondsSinceEpoch = zdt.toEpochSecond() ;

Si vous vouliez dire un nombre de millisecondes depuis 1970 commencé en UTC, puis extraire une Instant. La classe Instant représente un moment sur la timeline dans UTC avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une fraction décimale).

Instant instant = zdt.toInstant() ;

demander le comte de millisecondes .

long millisecondsSinceEpoch = instant.toEpochMill() ;

Gardez à l'esprit que demander soit secondes entières ou millisecondes peut entraîner la perte de données. Le ZonedDateTime et Instant fois résolus à nanosecondes. Ainsi, tout microsecondes ou nanosecondes qui peuvent être présents seront ignorées que vous comptez vos entiers secondes ou millisecondes .


A propos de java.time

Le java.time cadre est construit en Java 8 et versions ultérieures. Ces classes supplantent la problématique vieux classes date de temps de hérités tels que java.util.Date , Calendar , et SimpleDateFormat .

Le projet Joda-Time , maintenant < a href = "https://en.wikipedia.org/wiki/Maintenance_mode" rel = "nofollow noreferrer"> mode maintenance , conseille la migration vers la page java.time classes.

Pour en savoir plus, voir le Oracle Tutorial . Et la recherche Stack Overflow pour de nombreux exemples et explications. Les spécifications JSR 310 .

L'utilisation d'un pilote JDBC conforme JDBC 4.2 ou version ultérieure, vous pouvez échanger des java.time objets directement avec votre base de données. Pas besoin de chaînes ni java.sql. * Classes.

Où obtenir les classes java.time?

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour des ajouts futurs possibles à java.time. Vous trouverez peut-être des classes utiles ici, comme Interval , YearWeek , YearQuarter et plus .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top