J'ai besoin de convertir un horodatage Unix en un objet date.
J'ai essayé ceci:
java.util.Date time = new java.util.Date(timeStamp);
La valeur d'horodatage est: 1280512800
La date devrait être "2010/07/30 - 22:30:00" (comme je l'obtiens par PHP), mais à la place, j'obtiens Thu Jan 15 23:11:56 IRST 1970
.
Comment faut-il procéder?
java.util.Date
maintenant sont héritées , supplantées par les classes java.time . Voir Tutoriel par Oracle .Réponses:
Pour
1280512800
, multipliez par 1000, car java attend des millisecondes:Si vous avez déjà eu des millisecondes, alors
new java.util.Date((long)timeStamp);
De la documentation :
la source
(long)
est très important: sans lui l'entier déborde.java.util.Date
est le nom complet de la classe.Date
est probablement la même chose à condition que vous importiez lejava.util
package sur votre classe.Date time = new Date(TimeUnit.MILLISECONDS.convert(unixTimestamp, TimeUnit.SECONDS));
java.util.Date
maintenant sont héritées , supplantées par les classes java.time . Voir Tutoriel par Oracle .java.time
Java 8 a introduit une nouvelle API pour travailler avec les dates et les heures: le package java.time .
Avec java.time, vous pouvez analyser votre compte de secondes entières depuis la référence de l'époque du premier moment de 1970 en UTC, 1970-01-01T00: 00Z. Le résultat est un
Instant
.Si vous avez besoin d'un
java.util.Date
pour interagir avec l'ancien code non encore mis à jour pour java.time , convertissez. Appelez de nouvelles méthodes de conversion ajoutées aux anciennes classes.la source
java.util.Date
. Les anciennes classes sont héritées et doivent être évitées. Bien que vous puissiez en effet convertir vers / à partir des classes héritées et java.time, il est préférable de s'en tenir à java.time chaque fois que possible.C'est le bon chemin:
la source
On dirait que le calendrier est la nouvelle façon de procéder:
La dernière ligne n'est qu'un exemple d'utilisation, celle-ci afficherait par exemple "14.06.2012".
Si vous avez utilisé System.currentTimeMillis () pour enregistrer l'horodatage, vous n'avez pas besoin de la partie "* 1000".
Si vous avez l'horodatage dans une chaîne, vous devez d'abord l'analyser comme un long: Long.parseLong (horodatage).
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
la source
timestamp
est un entier, vous devez d'(long)
abord le convertir, sinon vous vous retrouverez avec des dates erronées.mydate.setTimeInMillis((long) timestamp*1000);
java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
sont désormais héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures. Voir Tutoriel par Oracle .tl; dr
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.Découvrez ce code en direct sur IdeOne.com .
Asia/Kabul
ouAsia/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 deZulu
, signifie UTC). Y a-t-il une chance que votre système d'exploitation ou PHP soit défini surAsia/Kabul
ou sur lesAsia/Tehran
fuseaux horaires? Je suppose que oui comme vous le signalezIRST
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 queAmerica/Montreal
,Africa/Casablanca
ouPacific/Auckland
. N'utilisez jamais l'abréviation de 3-4 lettres telle queEST
ouIST
ouIRST
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 aZonedDateTime
. Toujours le même moment simultané, mais vu comme une horloge murale différente .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.
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 unint
!).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.
À 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
, etSimpleDateFormat
.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?
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 .la source
Le constructeur de Date s'attend à ce que la valeur timeStamp soit en millisecondes. Multipliez la valeur de votre horodatage par 1000, puis passez au constructeur.
la source
Si vous convertissez une valeur d'horodatage sur une autre machine, vous devez également vérifier le fuseau horaire de cette machine. Par exemple;
Les descriptions ci-dessus entraîneront des valeurs de date différentes, si vous exécutez avec des fuseaux horaires EST ou UTC.
Pour définir le fuseau horaire; aka UTC, vous pouvez simplement réécrire;
la source
Pour kotlin
la source
Parfois, vous devez travailler avec des ajustements.
N'utilisez pas le casting trop longtemps! Utilisez le nanoadjustment.
Par exemple, en utilisant Oanda Java API pour le trading, vous pouvez obtenir datetime au format UNIX.
Par exemple: 1592523410.590566943
vous obtenez:
Utiliser aussi:
la source
la source