web-dev-qa-db-fra.com

Comment obtenir l'heure actuelle au format AAAA-MM-JJ HH: MI: Sec.Millisecond format Java?

Le code ci-dessous me donne l'heure actuelle. Mais cela ne dit rien des millisecondes. 

public static String getCurrentTimeStamp() {
    SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy
    Date now = new Date();
    String strDate = sdfDate.format(now);
    return strDate;
}

Je reçois la date au format 2009-09-22 16:47:08 (AAAA-MM-JJ HH: MI: Sec) .

Mais je veux récupérer l'heure actuelle au format 2009-09-22 16:47:08.128 ((AAAA-MM-JJ HH: MI: Sec.Ms) - 128 indique la milliseconde.

SimpleTextFormat fonctionnera bien. Ici, l'unité de temps la plus basse est la seconde, mais comment obtenir aussi la milliseconde?

543
Sunil Kumar Sahoo
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
845
JayJay

Un Java un paquebot

public String getCurrentTimeStamp() {
    return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
}

dans le style JDK8

public String getCurrentLocalDateTimeStamp() {
    return LocalDateTime.now()
       .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
}
176
Joram

Il vous suffit d'ajouter le champ milliseconde dans votre chaîne de format de date:

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

Le document API de SimpleDateFormat décrit la chaîne de format en détail.

97
Michael Borgwardt

essaye ça:-

http://docs.Oracle.com/javase/6/docs/api/Java/text/SimpleDateFormat.html

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
Date date = new Date();
System.out.println(dateFormat.format(date));

ou

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
38
duggu

tl; dr

Instant.now()
       .toString()

2016-05-06T23: 24: 25.694Z

ZonedDateTime.now( 
    ZoneId.of( "America/Montreal" ) 
).format(  DateTimeFormatter.ISO_LOCAL_DATE_TIME )
 .replace( "T" , " " )

2016-05-06 19: 24: 25.694

Java.time

Dans Java 8 et versions ultérieures, nous avons le framework Java.time intégré à Java 8 et versions ultérieures. Ces nouvelles classes supplantent les anciennes classes problématiques Java.util.Date/.Calendar. Les nouvelles classes s’inspirent du très réussi framework Joda-Time , destiné à lui succéder, de concept similaire mais de nouvelle architecture. Défini par JSR 310 . Etendu par le projet ThreeTen-Extra . Voir le Tutorial .

Sachez que Java.time est capable de la résolution nanoseconde (9 décimales en fraction de seconde), par rapport à la résolution milliseconde (3 décimales) de Java.util.Date et de Joda-Time. Ainsi, lorsque vous formatez pour n’afficher que 3 décimales, vous pourriez cacher des données.

Si vous souhaitez éliminer les microsecondes ou les nanosecondes de vos données, tronquez-les.

Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;

Les classes Java.time utilisent par défaut le format ISO 8601 lors de l'analyse syntaxique/de la génération de chaînes. Z à la fin est l'abréviation de Zulu et signifie UTC

Un Instant représente un moment sur la ligne de temps au format UTC avec une résolution pouvant atteindre nanosecondes . La capture du moment actuel dans Java 8 est limitée à millisecondes , avec une nouvelle implémentation dans Java 9 permettant de capturer jusqu’à une nanoseconde en fonction des capacités de l’horloge matérielle de votre ordinateur.

Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();

2016-05-06T23: 24: 25.694Z

Remplacez la T au milieu par un espace et la Z par rien pour obtenir le résultat souhaité. 

String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.

2016-05-06 23: 24: 25.694

Comme vous ne vous souciez pas d'inclure le décalage horaire ou le fuseau horaire, créez une date-heure "locale" indépendante de toute localité.

String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );

Joda-Time

La très réussie bibliothèque Joda-Time a été l’inspiration du framework Java.time. Il est conseillé de migrer vers Java.time lorsque cela vous convient.

Le format ISO 8601 inclut des millisecondes. Il s'agit du format par défaut pour la bibliothèque Joda-Time 2.4.

System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );

Quand couru…

Now: 2013-11-26T20:25:12.014Z

Vous pouvez également demander la fraction-de-seconde en millisecondes, si nécessaire:

int millisOfSecond = myDateTime.getMillisOfSecond ();
24
Basil Bourque

Le plus simple était d’utiliser (avant Java 8),

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

Mais SimpleDateFormat n'est pas thread-safe. Ni Java.util.Date . Cela conduira à des problèmes de concurrence potentiels pour les utilisateurs. Et il y a beaucoup de problèmes dans ces conceptions existantes. Pour les surmonter maintenant dans Java 8, nous avons un paquet séparé appelé Java.time . Ce Java SE 8 Date and Time document offre une bonne vue d'ensemble.

Donc, en Java 8, quelque chose comme ci-dessous fera l'affaire (pour formater la date/heure actuelles),

LocalDateTime.now()
   .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

Et une chose à noter est qu’il a été développé avec l’aide de la bibliothèque tierce populaire joda-time ,

Le projet a été dirigé conjointement par l'auteur de Joda-Time (Stephen Colebourne) et d'Oracle, sous JSR 310, et figurera dans le nouveau package Java SE 8 Java.time.

Mais maintenant, le joda-time est devenu obsolète et a demandé aux utilisateurs de migrer vers le nouveau Java.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.

Quoi qu'il en soit, cela dit,

Si vous avez un Agenda instance que vous pouvez utiliser ci-dessous pour le convertir en nouveau Java.time,

    Calendar calendar = Calendar.getInstance();
    long longValue = calendar.getTimeInMillis();         

    LocalDateTime date =
            LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
    String formattedString = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

    System.out.println(date.toString()); // 2018-03-06T15:56:53.634
    System.out.println(formattedString); // 2018-03-06 15:56:53.634

Si vous aviez un objet Date,

    Date date = new Date();
    long longValue2 = date.getTime();

    LocalDateTime dateTime =
            LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue2), ZoneId.systemDefault());
    String formattedString = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

    System.out.println(dateTime.toString()); // 2018-03-06T15:59:30.278
    System.out.println(formattedString);     // 2018-03-06 15:59:30.278

Si vous venez d'avoir l'époque millisecondes Epoch,

LocalDateTime date =
        LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault());
7
prime

Je voudrais utiliser quelque chose comme ça:

String.format("%tF %<tT.%<tL", dateTime);

La variable dateTime peut être n’importe quelle date et/ou heure, voir JavaDoc pour Formatter .

6
Usagi Miyamoto

Pour compléter les réponses ci-dessus, voici un petit exemple de travail d'un programme qui imprime l'heure et la date actuelles, millisecondes incluse.

import Java.text.SimpleDateFormat;
import Java.util.Date;

public class test {
    public static void main(String argv[]){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Date now = new Date();
        String strDate = sdf.format(now);
        System.out.println(strDate);
    }
}

4
ttb

Vous pouvez simplement l'obtenir dans le format que vous voulez.

String date = String.valueOf(Android.text.format.DateFormat.format("dd-MM-yyyy", new Java.util.Date()));
0
Hardik Lakhani

Le document dans Java 8 le nomme fraction de seconde , tandis que dans Java 6 il s'appelle millisecond . Cela m'a amené à la confusion

0
ejaenv

Utilisez ceci pour obtenir votre heure actuelle au format spécifié: 

 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 System.out.print(dateFormat.format(System.currentTimeMillis()));  }
0
Abhishek Sengupta

Je ne vois pas de référence à ceci:

SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmssSSS");

le format ci-dessus est également utile.

http://www.Java2s.com/Tutorials/Java/Date/Date_Format/Format_date_in_yyyyMMddHHmmssSSSformat_in_Java.htm

0
Smart Coder