Question Comment obtenir l'heure actuelle en AAAA-MM-JJ HH: MI: format Milliseconde en Java?


Le code ci-dessous me donne l'heure actuelle. Mais il ne dit rien à propos 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 dans le format 2009-09-22 16:47:08  (AAAA-MM-JJ HH: MI: Sec).

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

SimpleTextFormat fonctionnera bien. Ici, l'unité de temps la plus basse est la deuxième, mais comment puis-je aussi obtenir la milliseconde?


483
2017-09-22 12:00


origine


Réponses:


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

766
2017-09-22 12:05



Un liner Java

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"));
}

158
2017-12-19 09:06



Vous n'avez qu'à ajouter le champ millisecondes dans votre chaîne de format de date:

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

le Doc API de SimpleDateFormat décrit la chaîne de format en détail.


93
2017-09-22 12:03



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()));

35
2017-10-07 05:52



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

En Java 8 et plus tard, nous avons le java.time cadre intégré dans Java 8 et plus tard. Ces nouvelles classes supplantent les anciennes classes gênantes java.util.Date/.Calendar. Les nouvelles classes sont inspirées par le très réussi Joda-Time cadre, conçu comme son successeur, concept similaire mais re-architecturé. Défini par JSR 310. Prolongé par le ThreeTen-Extra projet. Voir le Didacticiel.

Sachez que java.time est capable de nanoseconde résolution (9 décimales en fraction de seconde), par rapport à la milliseconde résolution (3 décimales) de java.util.Date et de Joda-Time. Donc, lors du formatage pour afficher seulement 3 décimales, vous pourriez cacher des données.

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

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

Les classes java.time utilisent ISO 8601 format par défaut lors de l'analyse / génération de chaînes. UNE Z à la fin est court pour Zuluet moyens UTC.

Un Instant représente un moment sur la timeline en UTC avec une résolution allant jusqu'à nanosecondes. Capturer le moment actuel en Java 8 est limité à millisecondes, avec une nouvelle implémentation en Java 9 capturant jusqu'à des nanosecondes 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

Remplace le T au milieu avec un espace, et le Z avec rien, pour obtenir votre sortie désirée.

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 ou le fuseau horaire, définissez une date / heure "locale" sans rapport avec une localité particulière.

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

Joda-Time

La bibliothèque Joda-Time, qui a connu un grand succès, a inspiré le framework java.time. Conseillé de migrer vers java.time lorsque cela est pratique.

le ISO 8601 le format inclut les millisecondes et est la valeur par défaut pour le Joda-Time 2.4 bibliothèque.

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

Quand couru ...

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

En outre, vous pouvez demander la fraction de fraction de seconde d'une milliseconde, si nécessaire:

int millisOfSecond = myDateTime.getMillisOfSecond ();

21
2017-11-26 20:29



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

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
2017-10-16 21:52



J'utiliserais quelque chose comme ça:

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

Variable dateTime pourrait être n'importe quelle valeur de date et / ou d'heure, voir JavaDoc pour Formatter.


4
2018-05-30 08:55



Le moyen 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 potentiels d'accès simultané 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 et heure document a un bon aperçu à ce sujet.

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

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

Et une chose à noter est qu’elle a été développée avec l’aide de la bibliothèque populaire de tiers. joda-temps,

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

Mais maintenant le joda-time devient obsolète et a demandé aux utilisateurs de migrer vers de nouveaux 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,

Si tu as un Calendrier par exemple, vous pouvez utiliser ci-dessous pour le convertir à la nouvelle 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 avez 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 aviez juste l’époque millisecondes,

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

1
2018-03-06 13:41



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
2018-05-05 09:41