web-dev-qa-db-fra.com

Convertir la date/heure actuelle en long en Java

Je souhaite convertir la date/heure actuelle en une valeur longue en Java.

Je sais que ça doit être quelque chose avec le DateTime

DateTime datetime = new DateTime();

Mais je ne pouvais pas trouver un moyen de convertir le dateTime en long.

11
Pi Horse

Si vous voulez dire current ou now alors System.currentTimeMillis() le fera pour vous. Plus d'informations ici: http://docs.Oracle.com/javase/7/docs/api/Java/lang/System.html

18
yǝsʞǝlA

Les autres réponses sont correctes.

Quatre façons de compter à partir de l'époque

Pour le préciser en détail, voici quatre manières d’obtenir le nombre de millisecondes écoulées depuis le nixEpoch , le début du 1er janvier 1970 en UTC / GMT (pas de décalage de fuseau horaire). Présenté par ordre de préférence.

Java.time

Les classes Java.time intégrées à Java 8 et versions ultérieures sont définies par JSR 31 . Ces classes supplantent les classes obsolètes Java.util.Date/Calendar. Ces classes sont inspirées de Joda-Time mais sont restructurées.

Les classes Java.time sont capables de contenir une résolution nanoseconde. Dans Java 8 en particulier, la capture du moment actuel est limitée à des millisecondes, en raison d'une ancienne implémentation de Clock . Java 9 a apporté une nouvelle implémentation de Clock , capable de capturer le moment actuel avec une résolution plus fine, limitée par les capacités du système d'exploitation hôte et du matériel hôte. Sur Oracle JDK 9.0.4 sur macOS Sierra, les valeurs sont exprimées en microsecondes , pour six chiffres de la fraction décimale.

La classe Instant inclut une méthode pratique toEpochMilli fournit des millisecondes. Méfiez-vous des pertes de données, car les microsecondes ou nanosecondes dans Instant sont ignorés lors de la génération d'un nombre de millisecondes .

_long millis = Instant.now().toEpochMilli();
_

System

La méthode de la classe SystemcurrentTimeMillis fonctionne. Mais il est probable que vous effectuiez un autre travail avec les valeurs date-heure. Si tel est le cas, ignorez System et utilisez simplement les classes date-heure.

_long millis = System.currentTimeMillis();
_

Joda-Time

Joda-Time est la bibliothèque populaire open source tierce utilisée à la place de _Java.util.Date_/Calendar. Sa classe principale est DateTime , alors c'est peut-être ce que vous aviez à l'esprit étant donné que votre question utilise ce terme.

Le projet Joda-Time est maintenant en mode maintenance . L'équipe conseille la migration vers les classes Java.time .

_long millis = org.joda.time.DateTime.now().getMillis();
_

_Java.util.Date_

Il vaut mieux éviter cette classe, ainsi que ses frères et sœurs _Java.util.Calendar_ et _Java.text.SimpleDateFormat_. Les anciennes classes de date-heure problématiques sont maintenant héritées, supplantées par les classes Java.time. Mais pour votre but spécifique, cette classefaitfonctionne.

_long millis = new Java.util.Date().getTime();
_

En passant, je faispasrecommande le temps de suivi en tant que compte à partir de - Époque . Le débogage est difficile et il est presque impossible de repérer des données non valides, car les humains ne peuvent pas interpréter un long comme une date-heure. Également ambigu, car différents systèmes utilisent différentes dates de référence d'époques , et utilisent différentes granularités de secondes entières, millisecondes , microsecondes , nanosecondes , et autres.


À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes legacy date-heure telles que Java.util.Date , Calendar , & SimpleDateFormat =.

Le projet Joda-Time , maintenant en mode de maintenance , conseille la migration vers Java.time classes.

Pour en savoir plus, consultez le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 31 .

Vous pouvez échanger des objets directement avec votre base de données Java.time Utilisez un pilote JDBC compatible avec JDBC 4.2 ou une version ultérieure. Pas besoin de chaînes, pas besoin de _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 d’éventuels ajouts à Java.time. Vous pouvez trouver ici quelques classes utiles telles que Interval , YearWeek , YearQuarter , et plus .

22
Basil Bourque

En supposant que vous utilisiez joda-time , la ligne suivante vous classera:

datetime.getMillis()
4
hd1

Vous pouvez appeler System.currentTimeMillis () , qui renvoie long. Ou, vous pouvez appeler BaseTime.getMillis () . L'un ou l'autre vous donnera la date et l'heure en tant que long.

0
Elliott Frisch