Java: Date à partir de timestamp unix
J'ai besoin de convertir un timestamp unix d'une date objet.
J'ai essayé ceci:
java.util.Date time = new java.util.Date(timeStamp);
Valeur d'horodatage est: 1280512800
La Date devrait être "2010/07/30 - 22:30:00" (comme je l'obtenir en PHP) mais au lieu de cela je obtenir Thu Jan 15 23:11:56 IRST 1970
.
Comment devrait-il être fait?
- Si vous utilisez Java 8 ou plus récent: jetez un oeil à cette réponse: stackoverflow.com/a/24703644/1115554
- Pour info, le gênants vieille date-heure classes telles que
java.util.Date
sont maintenant héritage, supplantée par la java.de temps les classes. Voir Tutoriel Oracle.
InformationsquelleAutor RYN | 2010-07-30
Vous devez vous connecter pour publier un commentaire.
Pour
1280512800
, multiplier par 1000, depuis java est attendu millisecondes:Si vous avez déjà eu des millisecondes, puis il suffit de
new java.util.Date((long)timeStamp);
De la la documentation:
(long)
est très importante: sans elle, les débordements d'entiers.Date
est probablement le exactement la même chose à condition de l'importation de lajava.util
package sur votre classe.Date time = new Date(TimeUnit.MILLISECONDS.convert(unixTimestamp, TimeUnit.SECONDS));
java.util.Date
sont maintenant héritage, supplantée par la java.de temps les classes. Voir Tutoriel Oracle.java.temps
Java 8 a introduit une nouvelle API pour travailler avec les dates et heures: le java.en temps.
Avec java.temps, vous pouvez utiliser:
Un Instant représente un horodatage dans Java 8. Avec la statique
Date.from()
méthode, vous pouvez convertir unInstant
à unjava.util.Date
instance.java.util.Date
. Les anciennes classes sont l'héritage et doit être évitée. Alors en effet, vous pouvez convertir vers/à partir de l'héritage et de java.les classes de temps, il est préférable de s'en tenir avec java.le temps chaque fois que possible.C'est la bonne façon:
Ressemble Calendrier est la nouvelle façon d'aller:
La dernière ligne est juste un exemple de comment l'utiliser, ce serait d'imprimer par exemple "14.06.2012".
Si vous avez utilisé le Système.currentTimeMillis() pour enregistrer le Timestamp vous n'avez pas besoin de la "*1000" partie.
Si vous avez l'horodatage dans une chaîne que vous avez besoin d'analyser d'abord comme un long: Long.parseLong(timestamp).
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
timestamp
est un entier vous avez besoin de le jeter aux(long)
d'abord, sinon vous vous retrouverez avec de fausses dates.mydate.setTimeInMillis((long) timestamp*1000);
java.util.Date
,java.util.Calendar
, etjava.text.SimpleDateFormat
sont maintenant héritage, supplantée par la java.temps les classes intégré dans Java 8 et les versions ultérieures. Voir Tutoriel par Oracle.tl;dr
java.temps
Le nouveau java.temps cadre intégré dans Java 8 et, plus tard, est le successeur de Joda-Time.
Ces nouvelles classes comprennent un pratique de l'usine méthode pour convertir un nombre entier de secondes de l'époque. Vous obtenez une
Instant
, un moment, sur le plan chronologique de l'UTC avec un maximum de nanosecondes résolution.Voir que code à exécuter en direct à IdeOne.com.
Asia/Kabul
ouAsia/Tehran
les fuseaux horaires ?Vous ont réussi à obtenir un temps de jour de valeur de 22:30 au lieu de 18:00 vu ici. Je soupçonne votre PHP utilitaire est implicitement l'application d'un fuseau horaire par défaut pour effectuer un réglage de l'heure UTC. Ma valeur est ici UTC, signifié par le
Z
(court pourZulu
, signifie UTC). Aucune chance pour que votre machine OS ou PHP est configuré pourAsia/Kabul
ouAsia/Tehran
les fuseaux horaires? Je suppose donc, comme vous le rapportIRST
dans votre sortie, ce qui signifie apparemment l'Iran temps. Actuellement en 2017 ce sont les seules zones d'exploitation avec l'été qui est de quatre heures et demie à l'avance de l'heure UTC.Spécifier un fuseau horaire nom dans le format de
continent/region
, commeAmerica/Montreal
,Africa/Casablanca
, ouPacific/Auckland
. Ne jamais utiliser de l'3-4 abréviation commeEST
ouIST
ouIRST
comme ils sont pas vrai fuseaux horaires, pas normalisée, et même pas unique(!).Si vous voulez pour voir votre moment à travers la lentille d'une région particulière du fuseau horaire, appliquer un
ZoneId
pour obtenir unZonedDateTime
. Toujours le même moment simultané, mais vu sous un autre horloge murale.La conversion à partir de java.le temps de classes héritées
Vous devriez coller avec le nouveau java.les classes de temps. Mais, vous pouvez convertir le vieux, si nécessaire.
Joda-Time
Mise à JOUR: Le Joda-Time projet est maintenant dans le mode de maintenance, avec l'équipe conseiller de la migration vers le java.le temps classes.
Pour info, le constructeur pour un Joda-Time DateTime est similaire: Multiplier par mille pour produire un
long
(pas unint
!).Mieux éviter de le notoirement gênants java.util.La Date et l' .Calendrier des classes. Mais si vous devez utiliser une Date, vous pouvez convertir de Joda-Time.
Sur java.temps
La java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date du temps des classes comme
java.util.Date
,Agenda
, &SimpleDateFormat
.La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
Pour en savoir plus, consultez les Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification est JSR 310.
Vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un Pilote JDBC compatible avec JDBC 4.2 ou plus tard. Pas besoin de chaînes, pas besoin de
java.sql.*
classes.Où obtenir le java.les classes de temps?
La ThreeTen-Extra projet s'étend java.temps avec d'autres classes. Ce projet est un terrain d'essai pour de possibles futurs ajouts à java.temps. Vous pouvez trouver quelques classes utiles ici comme
Intervalle
,YearWeek
,YearQuarter
, et plus.Date du constructeur attend l'horodatage valeur en millisecondes.
Multipliez vos timestamp de la valeur 1000, puis passe est pour le constructeur.
Si vous êtes à la conversion d'une valeur d'horodatage sur un autre ordinateur, vous devez également vérifier le fuseau horaire de la machine. Par exemple;
Ci-dessus decriptions entraînera différentes valeurs de Date, si vous exécutez avec est ou UTC fuseaux horaires.
De régler le fuseau horaire; alias à l'UTC,
vous pouvez simplement réécrire;