web-dev-qa-db-fra.com

type de données datetime en java

Quel type de données puis-je utiliser en Java pour conserver la date et l'heure actuelles?. Je veux stocker la date et l'heure dans une base de données, ainsi qu'un champ dans le bean Java pour contenir cela.

est-ce Java.util.Date?

14
akshay

Java.util.Date représente un instant à temps, sans référence à un fuseau horaire ou à un système de calendrier particulier. Cependant, il contient la date et l’heure - c’est fondamentalement un nombre de millisecondes depuis l’époque Unix.

Sinon, vous pouvez utiliser Java.util.Calendar, qui fait sait à propos de ces deux choses.

Personnellement, je vous recommanderais fortement d'utiliser Joda Time qui est une API {beaucoup} plus riche en date/heure. Il vous permet d’exprimer vos données beaucoup plus clairement, avec des types pour "dates seulement", "heures locales", "date/heure locales", "instantané", "date/heure avec fuseau horaire", etc. La plupart des types sont également immuables, ce qui constitue un avantage {énorme} _ en termes de clarté du code.

24
Jon Skeet
import Java.util.Date;
import Java.text.DateFormat;
import Java.text.SimpleDateFormat;

private String getDateTime() {
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(date);
}
10
Rupok

Java.time

Le framework Java.time intégré à Java 8 et aux versions ultérieures supplante à la fois les anciennes classes date-heure fournies avec les premières versions de Java et la bibliothèque Joda-Time. Les classes Java.time ont été rétroportées vers Java 6 & 7 et Android.

La classe Instant représente un moment sur la ligne de temps en temps UTC avec une résolution en nanosecondes. 

Instant instant = Instant.now();

Appliquez un décalage par rapport à UTC (nombre d'heures et minutes et secondes possibles) pour obtenir un OffsetDateTime.

ZoneOffset offset = ZoneOffset.of( "-04:00" );
OffsetDateTime odt = OffsetDateTime.ofInstant( instant , offset );

Mieux encore, vous appliquez un fuseau horaire complet qui est un décalage, ainsi qu'un ensemble de règles de traitement des anomalies telles que l'heure d'été (DST).

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Base de données

Espérons que les pilotes JDBC seront mis à jour pour fonctionner directement avec les classes Java.time. Jusque-là, nous devons utiliser les classes Java.sql pour déplacer les valeurs date-heure de/vers la base de données. Mais limitez votre utilisation des classes Java.sql à la corvée du transit de la base de données. Ne les utilisez pas pour la logique métier. Dans le cadre des anciennes classes date-heure, ils sont mal conçus, déroutants et gênants.

Utilisez les nouvelles méthodes ajoutées aux anciennes classes pour convertir en/à partir de Java.time. Recherchez les méthodes to… et valueOf.

Utilisez la classe Java.sql.Timestamp pour les valeurs date-heure. 

Java.sql.Timestamp ts = Java.sql.Timestamp.valueOf( instant );

Et aller dans l'autre sens…

Instant instant = ts.toInstant();

Pour les données date-heure, vous voulez pratiquement toujours le type de données TIMESTAMP WITH TIME ZONE plutôt que WITHOUT lors de la conception des colonnes de votre table dans votre base de données.

4
Basil Bourque

+1 de la recommandation pour Joda-time. Si vous envisagez de faire autre chose qu'un simple exemple Hello World, je vous suggère de lire ceci:

Meilleures pratiques pour l'heure et le fuseau horaire

3
nogridbag

Dépend du SGBDR ou même du pilote JDBC. 

La plupart du temps, vous pouvez utiliser Java.sql.Timestamp la plupart du temps avec une instruction préparée: 

pstmt.setTimestamp( index, new Timestamp( yourJavaUtilDateInstance.getTime() );
1
OscarRyz

J'ai utilisé cette importation:

import Java.util.Date;

Et a déclaré ma variable comme ceci: 

Date studentEnrollementDate;
1
dmiadan

Depuis Java 8, il semble que la voie soit la bibliothèque standard Java.time . De la page Web Joda time :

Notez qu'à partir de Java SE 8, les utilisateurs sont invités à migrer vers Java.time (JSR-310), une partie essentielle du JDK qui remplace ce projet.


Revenons à ta question. Si vous utilisiez Java 8, je pense que vous voulez LocalDateTime . Parce qu’il contient la date et l’heure du jour, mais n’a pas connaissance du fuseau horaire ou de tout point de référence dans le temps tel que l’époque unix.

0
Tarrasch

Vous pouvez utiliser le calendrier.

     Calendar rightNow = Calendar.getInstance();

Calendrier

Date4j alternative à Date, Calendar et les classes Java associées

0
Srikanth Venkatesh