Comment obtenir Année, Mois, Jour, heures, minutes, secondes et millisecondes du moment actuel en Java?
Comment puis-je obtenir l'année, le mois, le jour, les heures, les minutes, les secondes et les millisecondes du moment actuel en Java? Je voudrais avoir comme Strings
.
9 réponses
vous pouvez utiliser les getter de java.time.LocalDateTime
pour cela.
LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
int millis = now.get(ChronoField.MILLI_OF_SECOND); // Note: no direct getter available.
System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);
ou, si vous n'êtes pas encore sur Java 8, utilisez java.util.Calendar
.
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1; // Note: zero based!
int day = now.get(Calendar.DAY_OF_MONTH);
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
int millis = now.get(Calendar.MILLISECOND);
System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);
dans tous les cas, cette impression à partir de Maintenant:
2010-04-16 15:15:17.816
pour convertir un int
en String
, utilisez String#valueOf()
.
si votre intention est après tout pour les organiser et les afficher dans un format de chaîne de caractères human friendly, alors mieux utiliser soit Java8 java.time.format.DateTimeFormatter
( tutoriel ici ),
LocalDateTime now = LocalDateTime.now();
String format1 = now.format(DateTimeFormatter.ISO_DATE_TIME);
String format2 = now.atZone(ZoneId.of("GMT")).format(DateTimeFormatter.RFC_1123_DATE_TIME);
String format3 = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss", Locale.ENGLISH));
System.out.println(format1);
System.out.println(format2);
System.out.println(format3);
ou si vous N'êtes pas encore sur Java 8, utilisez java.text.SimpleDateFormat
:
Date now = new Date(); // java.util.Date, NOT java.sql.Date or java.sql.Timestamp!
String format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(now);
String format2 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH).format(now);
String format3 = new SimpleDateFormat("yyyyMMddHHmmss", Locale.ENGLISH).format(now);
System.out.println(format1);
System.out.println(format2);
System.out.println(format3);
de toute façon, cela donne:
2010-04-16T15:15:17.816 Fri, 16 Apr 2010 15:15:17 GMT 20100416151517
voir aussi:
bascule joda-time et vous pouvez le faire en trois lignes
DateTime jodaTime = new DateTime();
DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS");
System.out.println("jodaTime = " + formatter.print(jodaTime));
vous avez également un accès direct aux différents champs de la date sans utiliser de calendrier.
System.out.println("year = " + jodaTime.getYear());
System.out.println("month = " + jodaTime.getMonthOfYear());
System.out.println("day = " + jodaTime.getDayOfMonth());
System.out.println("hour = " + jodaTime.getHourOfDay());
System.out.println("minute = " + jodaTime.getMinuteOfHour());
System.out.println("second = " + jodaTime.getSecondOfMinute());
System.out.println("millis = " + jodaTime.getMillisOfSecond());
sortie est la suivante:
jodaTime = 2010-04-16 18:09:26.060
year = 2010
month = 4
day = 16
hour = 18
minute = 9
second = 26
millis = 60
selon http://www.joda.org/joda-time /
Joda-Time est le standard de facto de la date et de l'heure bibliothèque pour Java. À partir de Java SE 8, les utilisateurs sont invités à migrer vers java.temps (JSR-310).
avec Java 8 et plus tard, utilisez le java.package .
ZonedDateTime.now().getYear();
ZonedDateTime.now().getMonthValue();
ZonedDateTime.now().getDayOfMonth();
ZonedDateTime.now().getHour();
ZonedDateTime.now().getMinute();
ZonedDateTime.now().getSecond();
ZonedDateTime.now()
est une méthode statique retournant la date-heure courante de l'horloge du système dans le fuseau horaire par défaut. Toutes les méthodes get renvoient une valeur int
.
// Java 8
System.out.println(LocalDateTime.now().getYear()); // 2015
System.out.println(LocalDateTime.now().getMonth()); // SEPTEMBER
System.out.println(LocalDateTime.now().getDayOfMonth()); // 29
System.out.println(LocalDateTime.now().getHour()); // 7
System.out.println(LocalDateTime.now().getMinute()); // 36
System.out.println(LocalDateTime.now().getSecond()); // 51
System.out.println(LocalDateTime.now().get(ChronoField.MILLI_OF_SECOND)); // 100
// Calendar
System.out.println(Calendar.getInstance().get(Calendar.YEAR)); // 2015
System.out.println(Calendar.getInstance().get(Calendar.MONTH ) + 1); // 9
System.out.println(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); // 29
System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)); // 7
System.out.println(Calendar.getInstance().get(Calendar.MINUTE)); // 35
System.out.println(Calendar.getInstance().get(Calendar.SECOND)); // 32
System.out.println(Calendar.getInstance().get(Calendar.MILLISECOND)); // 481
// Joda Time
System.out.println(new DateTime().getYear()); // 2015
System.out.println(new DateTime().getMonthOfYear()); // 9
System.out.println(new DateTime().getDayOfMonth()); // 29
System.out.println(new DateTime().getHourOfDay()); // 7
System.out.println(new DateTime().getMinuteOfHour()); // 19
System.out.println(new DateTime().getSecondOfMinute()); // 16
System.out.println(new DateTime().getMillisOfSecond()); // 174
// Formatted
// 2015-09-28 17:50:25.756
System.out.println(new Timestamp(System.currentTimeMillis()));
// 2015-09-28T17:50:25.772
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(new Date()));
// Java 8
// 2015-09-28T17:50:25.810
System.out.println(LocalDateTime.now());
// joda time
// 2015-09-28 17:50:25.839
System.out.println(DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS").print(new org.joda.time.DateTime()));
ou utilisez java.SQL.Timestamp. Calendrier est un peu lourd,je recommande de ne pas l'utiliser en code de production. Joda va mieux.
import java.sql.Timestamp;
public class DateTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new Timestamp(System.currentTimeMillis()));
}
}
tl; dr
ZonedDateTime.now( // Capture current moment as seen in the wall-clock time used by the people of a particular region (a time zone).
ZoneId.of( "America/Montreal" ) // Specify desired/expected time zone. Or pass `ZoneId.systemDefault` for the JVM’s current default time zone.
) // Returns a `ZonedDateTime` object.
.getMinute() // Extract the minute of the hour of the time-of-day from the `ZonedDateTime` object.
42
ZonedDateTime
pour capturer le moment actuel tel qu'il est vu dans l'Heure de l'horloge murale utilisée par les gens d'une région particulière (un fuseau horaire), utilisez ZonedDateTime
.
un fuseau horaire est crucial pour déterminer une date. Pour un moment donné, la date varie autour du globe par zone. Par exemple, quelques quelques minutes après minuit Paris France est un nouveau jour, alors encore "hier" dans Montréal, Québec .
si aucun fuseau horaire n'est spécifié, la JVM applique implicitement son fuseau horaire par défaut. Cette valeur par défaut peut changer à tout moment pendant l'exécution(!), afin que vos résultats peuvent varier. Il est préférable de spécifier votre fuseau horaire désiré/attendu explicitement comme argument.
spécifier un nom du fuseau horaire approprié dans le format de continent/region
, tel que America/Montreal
, Africa/Casablanca
, ou Pacific/Auckland
. N'utilisez jamais l'abréviation de 3-4 lettres comme EST
ou IST
car ils sont pas vrai fuseaux horaires, non standardisé, et même pas unique(!).
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
appelez l'un des nombreux getters pour retirer les morceaux de la date-heure.
int year = zdt.getYear() ;
int monthNumber = zdt.getMonthValue() ;
String monthName = zdt.getMonth().getDisplayName( TextStyle.FULL , Locale.JAPAN ) ; // Locale determines human language and cultural norms used in localizing. Note that `Locale` has *nothing* to do with time zone.
int dayOfMonth = zdt.getDayOfMonth() ;
String dayOfWeek = zdt.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
int hour = zdt.getHour() ; // Extract the hour from the time-of-day.
int minute = zdt.getMinute() ;
int second = zdt.getSecond() ;
int nano = zdt.getNano() ;
Le de java.les classes de temps se résolvent à nanosecondes . Votre Question demandait la fraction d'une seconde dans millisecondes . Évidemment, vous pouvez diviser par un million pour tronquer les nanosecondes en millisecondes, au prix d'une possible perte de données. Ou utilisez le TimeUnit
enum pour une telle conversion.
long millis = TimeUnit.NANOSECONDS.toMillis( zdt.getNano() ) ;
DateTimeFormatter
pour produire un String
pour combiner des morceaux de texte, Utiliser DateTimeFormatter
". Rechercher le débordement de la pile pour plus d'informations à ce sujet.
Instant
habituellement le meilleur pour suivre les moments dans UTC. Pour ajuster D'une date-heure zonée à UTC, extraire un Instant
.
Instant instant = zdt.toInstant() ;
Et revenir en arrière.
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Africa/Tunis" ) ) ;
LocalDateTime
quelques autres réponses utilisez la classe LocalDateTime
. Cette classe ne convient pas à la fonction de suivi des moments réels, des moments spécifiques sur la ligne de temps, car elle manque intentionnellement de tout concept de fuseau horaire ou de décalage par rapport à-UTC.
alors à quoi sert LocalDateTime
? Utilisez LocalDateTime
lorsque vous avez l'intention d'appliquer une date et une heure à n'importe quelle localité ou toutes les localités , plutôt qu'une localité spécifique.
par exemple, Noël cette année commence au LocalDateTime.parse( "2018-12-25T00:00:00" )
. Cette valeur n'a aucun sens jusqu'à ce que vous appliquiez un fuseau horaire (un ZoneId
) pour obtenir un ZonedDateTime
. Noël se produit d'abord dans Kiribati , puis plus tard en Nouvelle-Zélande et en Asie de l'Extrême-Orient. Heures plus tard, Noël commence en Inde. Plus d'une heure plus tard en Afrique et en Europe. Et toujours pas de Noël dans les Amériques jusqu'à ce que plusieurs heures plus tard. Noël commençant dans n'importe quel un lieu doit être représenté avec ZonedDateTime
. Noël partout est représenté par un LocalDateTime
.
à Propos de de java.heure
Le de java.time framework est construit dans Java 8 et plus tard. Ces classes supplantent le gênant ancien legacy classes de date-heure telles que java.util.Date
, Calendar
, & SimpleDateFormat
.
le Joda-Time projet, maintenant dans mode de maintenance , conseille la migration vers le java.temps classes.
pour en savoir plus, voir la Oracle Tutoriel . Et rechercher le débordement de la pile pour de nombreux exemples et explications. La spécification est JSR 310 .
vous pouvez échanger java.temps objets directement avec votre base de données. Utilisez un JDBC driver conforme à JDBC 4.2 ou plus tard. Pas besoin de Chaînes, pas besoin de classes java.sql.*
.
où obtenir le java.les classes de temps?
- Java SE 8 , Java SE 9 , Java SE 10 , et plus tard
- Built-in.
- fait partie de L'API Java standard avec une implémentation groupée.
- Java 9 ajoute fonctionnalités mineures et corrections.
- Java SE 6 et Java SE 7
- une grande partie de la java.la fonctionnalité time est rétroportée à Java 6 & 7 dans ThreeTen-Backport .
- Android
- versions ultérieures des implémentations du paquet Android de java.les classes de temps.
- Pour plus tôt Android (<26 ans), le ThreeTenABP "1519430920 projet" s'adapte ThreeTen-Backport (mentionné ci-dessus). Voir comment utiliser ThreeTenABP... .
dans java 7 Calendrier d'une ligne
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(Calendar.getInstance().getTime())
regardez la documentation API pour le java.util.Classe de calendrier et ses dérivés (Vous pourriez être particulièrement intéressé par la classe GregorianCalendar).
Calendrier maintenant = nouveau Calendrier() // ou new GregorianCalendar(), ou quelle que soit la saveur, vous avez besoin
maintenant.MOIS maintenant.Heures 151910920"
etc.