tl; dr
Instant.ofEpochSecond( 1_280_512_800L )
2010-07-30T18: 00: 00Z
java.time
Le nouveau framework java.time intégré à Java 8 et versions ultérieures est le successeur de Joda-Time.
Ces nouvelles classes incluent une méthode d'usine pratique pour convertir un nombre de secondes entières de l'époque. Vous obtenez un Instant
, un moment sur la chronologie en UTC avec une résolution allant jusqu'à nanosecondes.
Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
instant.toString (): 2010-07-30T18: 00: 00Z
Découvrez ce code en direct sur IdeOne.com .
Asia/Kabul
ou Asia/Tehran
fuseaux horaires?
Vous avez indiqué avoir obtenu une valeur horaire de 22h30 au lieu de 18h00 ici. Je soupçonne que votre utilitaire PHP applique implicitement un fuseau horaire par défaut pour s'ajuster à partir d'UTC. Ma valeur ici est UTC, signifiée par le Z
(abréviation de Zulu
, signifie UTC). Y a-t-il une chance que votre système d'exploitation ou PHP soit défini sur Asia/Kabul
ou sur les Asia/Tehran
fuseaux horaires? Je suppose que oui comme vous le signalez IRST
dans votre sortie qui signifie apparemment l'heure de l'Iran. Actuellement, en 2017, ce sont les seules zones fonctionnant avec une heure d'été qui a quatre heures et demie d'avance sur UTC.
Indiquez un nom de fuseau horaire approprié dans le format continent/region
, tels que America/Montreal
, Africa/Casablanca
ou Pacific/Auckland
. N'utilisez jamais l'abréviation de 3-4 lettres telle que EST
ou IST
ou IRST
car ce ne sont pas de vrais fuseaux horaires, ni standardisés, ni même uniques (!).
Si vous voulez voir votre moment à travers l'objectif du fuseau horaire d'une région particulière, appliquez a ZoneId
pour obtenir a ZonedDateTime
. Toujours le même moment simultané, mais vu comme une horloge murale différente .
ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z ); // Same moment, same point on timeline, but seen as different wall-clock time.
2010-07-30T22: 30 + 04: 30 [Asie / Téhéran]
Conversion de java.time en classes héritées
Vous devriez vous en tenir aux nouvelles classes java.time. Mais vous pouvez convertir en ancien si nécessaire.
java.util.Date date = java.util.Date.from( instant );
Joda-Time
MISE À JOUR: Le projet Joda-Time est maintenant en mode maintenance , l'équipe conseillant la migration vers les classes java.time .
Pour info, le constructeur d'un Joda-Time DateTime est similaire: Multipliez par mille pour produire un long
(pas un int
!).
DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
Il vaut mieux éviter les classes java.util.Date et .Calendar particulièrement gênantes. Mais si vous devez utiliser une date, vous pouvez convertir à partir de Joda-Time.
java.util.Date date = dateTime.toDate();
À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date
, Calendar
, et SimpleDateFormat
.
Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes java.time .
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Vous pouvez échanger des objets java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de java.sql.*
cours.
Où obtenir les classes java.time?
- Java SE 8 , Java SE 9 et versions ultérieures
- Intégré.
- Une partie de l'API Java standard avec une implémentation groupée.
- Java 9 ajoute quelques fonctionnalités et correctifs mineurs.
- Java SE 6 et Java SE 7
- Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
- Android
- Versions ultérieures des implémentations de bundles Android des classes java.time.
- Pour les versions antérieures d'Android (<26), le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour de futurs ajouts possibles à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval
, YearWeek
, YearQuarter
et plus .