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 .

87
demandé sur wattostudios 2010-04-16 19:10:51
la source

9 ответов

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:

217
répondu BalusC 2017-05-23 14:55:01
la source

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).

30
répondu crowne 2015-05-28 12:17:37
la source

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 .

6
répondu Ortomala Lokni 2018-06-21 10:27:06
la source
    // 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()));
5
répondu blueberry0xff 2015-09-29 08:40:47
la source

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()));
    }
}
2
répondu pavel 2014-04-18 16:18:32
la source

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?

2
répondu Basil Bourque 2018-06-21 02:30:32
la source

dans java 7 Calendrier d'une ligne

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(Calendar.getInstance().getTime())
0
répondu Lucke 2017-05-22 12:27:00
la source

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).

-2
répondu M. Jessup 2010-04-16 19:12:45
la source

Calendrier maintenant = nouveau Calendrier() // ou new GregorianCalendar(), ou quelle que soit la saveur, vous avez besoin

maintenant.MOIS maintenant.Heures 151910920"

etc.

-2
répondu llappall 2010-04-16 20:53:52
la source

Autres questions sur