Comment obtenir l'horodatage actuel au format chaîne en Java? "aaaa.MM.dd.HH.mm.ss"
Comment obtenir l'horodatage au format chaîne en Java? "aaaa. MM. jj. HH. mm. ss"
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());
C'est ce que j'ai, mais Timestamp() nécessite un paramètre...
5 answers
Remplacer
new Timestamp();
Avec
new java.util.Date()
, Car il n'y a pas de constructeur par défaut pour Timestamp
, ou vous pouvez le faire avec la méthode:
new Timestamp(System.currentTimeMillis());
Utilisez la classe java.util.Date
au lieu de l'horodatage.
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
Cela vous donnera la date actuelle dans le format spécifié.
Vous pouvez utiliser java.util.Date au lieu de l'horodatage:
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
Tl; dr
Utilisez uniquement java moderne.temps classes. N'utilisez jamais les terribles classes héritées telles que SimpleDateFormat
, Date
, ou java.sql.Timestamp
.
ZonedDateTime // Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone).
.now( // Capture the current moment.
ZoneId.of( "Africa/Tunis" ) // Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST.
) // Returns a `ZonedDateTime` object.
.format( // Generate a `String` object containing text representing the value of our date-time object.
DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" )
)
Utiliser java.sql uniquement pour le transfert de base de données
Le java.types sql, tels que java.sql.Timestamp
, ne doit être utilisé que pour le transfert dans et hors de la base de données. Convertir immédiatement en java.types de temps dans Java 8 et versions ultérieures.
java.time.Instant
Un java.sql.Timestamp
correspond à un java.time.Instant
, un moment dans le scénario de L'UTC.
java.sql.Timestamp ts = myResultSet.getTimestamp( … );
Instant instant = ts.toInstant();
Fuseau horaire
Appliquer le fuseau horaire souhaité / attendu pour obtenir un ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Chaînes formatées
Utiliser un DateTimeFormatter
pour générer votre chaîne. Les codes de motif sont similaires à ceux de java.text.SimpleDateFormat
mais pas exactement, alors lisez attentivement le doc.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );
Ce format particulier est ambigu quant à sa signification exacte car il ne contient aucune indication de offset-from-UTC ou fuseau horaire.
ISO 8601
Si vous avez votre mot à dire, je vous suggère d'envisager d'utiliser les formats standard ISO 8601 plutôt que de lancer les vôtres. Le format standard est assez similaire au vôtre. Par exemple:2016-02-20T03:26:32+05:30
.
Le java.les classes de temps utilisent ces formats standard par défaut, donc pas besoin de spécifier un modèle. La classe ZonedDateTime
étend le format standard en ajoutant le nom du fuseau horaire (une amélioration sage).
String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]
Convertir en java.sql
Vous pouvez convertir à partir de java.retour à java.sql.Timestamp
. Extraire un Instant
du ZonedDateTime
.
De nouvelles méthodes ont été ajoutées aux anciennes classes pour faciliter la conversion vers/depuis java.les classes de temps.
java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );
Une approche plus appropriée consiste à spécifier une région Locale en tant que paramètre dans le constructeur. L'exemple ci-dessous utilise une région locale américaine. Le formatage de la date est sensible aux paramètres régionaux et utilise les paramètres régionaux pour adapter les informations relatives aux coutumes et conventions de la région de l'utilisateur Locale (Java Platform SE 7)
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());