Comment créer un horodatage avec la date 23/09/2007?
100
Par Timestamp
, je suppose que vous voulez dire java.sql.Timestamp
. Vous remarquerez que cette classe a un constructeur qui accepte un long
argument. Vous pouvez analyser cela en utilisant la DateFormat
classe:
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);
java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
sont maintenant héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures. Voir le didacticiel d'Oracle .Et ça?
la source
Que voulez-vous dire horodatage? Si vous voulez dire millisecondes depuis l'époque Unix:
Si vous voulez un objet java.sql.Timestamp réel:
la source
Calendar.SEPTEMBER
tl; dr
java.time
Mettons à jour cette page en affichant le code à l'aide de java.time framework intégré à Java 8 et supérieur.
Ces nouvelles classes sont inspirées de Joda-Time , défini par JSR 310 , et étendues par le ThreeTen-Extra projet . Ils remplacent les anciennes classes date-heure notoirement gênantes fournies avec les premières versions de Java.
Dans java.time, an
Instant
est un moment sur la chronologie en UTC. AZonedDateTime
est un instant ajusté dans un fuseau horaire (ZoneId
).Le fuseau horaire est crucial ici. Une date de
September 23, 2007
ne peut pas être traduite en un moment de la chronologie sans appliquer un fuseau horaire. Considérez qu'un nouveau jour se lève plus tôt à Paris qu'à Montréal où il est encore «hier».En outre, un java.sql.Timestamp représente à la fois une date et une heure du jour. Il faut donc injecter une heure pour accompagner la date. Nous supposons que vous voulez que le premier moment de la journée soit l'heure de la journée. Notez que ce n'est pas toujours le moment
00:00:00.0
cause de l'heure d'été et éventuellement d'autres anomalies.Notez que contrairement à l'ancienne classe java.util.Date, et contrairement à Joda-Time, les types java.time ont une résolution de nanosecondes plutôt que de millisecondes. Cela correspond à la résolution de java.sql.Timestamp.
Notez que java.sql.Timestamp a la mauvaise habitude d'appliquer implicitement le fuseau horaire par défaut actuel de votre JVM à sa valeur date-heure lors de la génération d'une représentation sous forme de chaîne via sa
toString
méthode. Ici, vous voyez monAmerica/Los_Angeles
fuseau horaire appliqué. En revanche, les classes java.time sont plus saines, utilisant les formats standard ISO 8601 .Dump dans la console.
Lorsqu'il est exécuté.
D'ailleurs, à partir de JDBC 4.2, vous pouvez utiliser directement les types java.time. Pas besoin de
java.sql.Timestamp
.PreparedStatement.setObject
ResultSet.getObject
À 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.*
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 futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme
Interval
,YearWeek
,YearQuarter
et plus .la source
Vous pouvez également effectuer les opérations suivantes:
la source
Selon l' API, le constructeur qui accepterait l'année, le mois, etc. est obsolète. Au lieu de cela, vous devez utiliser le constructeur qui accepte un long. Vous pouvez utiliser une implémentation de Calendar pour construire la date souhaitée et accéder à la représentation temporelle sous forme de long, par exemple avec la méthode getTimeInMillis .
la source
Par souci d'exhaustivité, également une solution avec Joda-Time version 2.5 et sa
DateTime
classe:la source
DateTime
objet. Cela signifie que vos résultats varieront selon les ordinateurs ou la configuration des paramètres du système d'exploitation hôte ou de la JVM. Pour des résultats prévisibles, transmettez un fuseau horaire à ceDateTime
constructeur. Choisissez le nom de fuseau horaire approprié pour votre intention. Par exemple,DateTimeZone.forID( "America/Montreal" )
ouDateTimeZone.UTC
.DateTime
objet ses millisecondes depuis l'époque. Remplacez.toDate().getTime()
par.getMillis()
.DateTimeZone.getDefault()
et en passant le résultat comme argument facultatif. (Au fait, idem pourLocale.getDefault()
, même problème sur l'ambiguïté des arguments optionnels.)Une réponse plus générale serait d'importer
java.util.Date
, puis lorsque vous devez définir untimestamp
égal à la date actuelle, il suffit de le définir égal ànew Date()
.la source