Java.util.Date format SSSSSS: si ce n'est pas des microsecondes, quels sont les 3 derniers chiffres?

vient de tester ce code sur mon poste de travail Windows (8) et un AIX:

    public static void main(String[] args) {
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(new Date()));
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(new Date()));
    }

et a obtenu quelque chose de similaire à ce résultat:

2013-10-07 12:53:26.000905
2013-10-07 12:53:26.000906

quelqu'un Peut-il svp m'expliquer quels sont les derniers chiffres, si ce n'est microsecondes?

Note: j'interagis avec une base de données DB2 dans laquelle les données chronologiques sont stockées en utilisant des colonnes chronométrées comme horodatage avec 6 chiffres après les secondes c'est-à-dire microsecondes (IMO). Mais tous ceux "timestamps" sont créés en demandant la requête suivante:

SELECT current timestamp as currenttimestamp FROM Table ( values (1)) temp

je me demande si, compte tenu des résultats ci-dessus, je ne pouvais pas simplement utiliser dans mon code new Date() au lieu de sélectionner le current timestamp dans la base de données.

Merci.

PS: j'ai cherché mais n'ai trouvé aucune question pertinente (répondue), comme: heure actuelle en microsecondes en java ou Obtenir l'heure avec heure, minute, seconde, milliseconde, microseconde

21
demandé sur Community 2013-10-07 15:04:44
la source

5 ответов

From the documentation of Simpledate format :

Letter     Date or Time Component     Presentation     Examples  
S          Millisecond                Number           978 

il est millisecondes , ou 1/1000e de seconde. Vous le formatez avec 6 chiffres, donc vous ajoutez 3 zéros supplémentaires...

vous pouvez le vérifier de cette façon:

    Date d =new Date();
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(d));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS").format(d));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(d));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS").format(d));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSS").format(d));
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(d));

sortie:

2013-10-07 12:13:27.132
2013-10-07 12:13:27.132
2013-10-07 12:13:27.132
2013-10-07 12:13:27.0132
2013-10-07 12:13:27.00132
2013-10-07 12:13:27.000132

( Ideone violon )

58
répondu ppeterka 2013-10-07 15:15:24
la source

tl; dr

Instant.now()
       .toString() 

2018-02-02T00: 28:02.487114 Z

de java.temps

Le accepté de Répondre par ppeterka est correct. Votre abus du modèle de formatage résulte en un affichage erroné de données, alors que la valeur interne est toujours limitée millisecondes.

Les classes

the troublesome SimpleDateFormat et Date que vous utilisez sont maintenant hérités, supplantés par le java.temps des classes. Le java.temps "1519330920 des cours de" gérer nanosecondes résolution beaucoup plus fine que la millisecondes la limite de l'héritage de classes.

l'équivalent de java.util.Date est java.time.Instant . Vous pouvez même convertir entre eux en utilisant de nouvelles méthodes ajoutées aux anciennes classes.

Instant instant = myJavaUtilDate.toInstant() ;

le Instant classe représente un moment sur la ligne de temps dans UTC avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une fraction décimale).

Capture le moment présent dans UTC. Java 8 capte le moment actuel en millisecondes, tandis qu'une nouvelle implémentation Clock en Java 9 capte le moment dans une granularité plus fine, typiquement des microsecondes bien qu'elle dépende des capacités de votre matériel informatique horloge & OS & JVM mise en œuvre.

Instant instant = Instant.now() ;

génère une chaîne de caractères au format standard ISO 8601.

String output = instant.toString() ;

2018-02-02T00: 28:02.487114 Z

pour générer des chaînes dans d'autres formats, rechercher le débordement de la pile pour DateTimeFormatter , déjà couvert à plusieurs reprises.

pour vous ajuster à un fuseau horaire autre que UTC, utilisez ZonedDateTime .

ZonedDateTime zdt = instant.atZone( ZoneId.of( "Pacific/Auckland" ) ) ;

à Propos de de java.heure

Le de java.time framework est construit dans Java 8 et plus tard. Ces classes remplacent les anciennes classes de date legacy telles que java.util.Date , Calendar , & SimpleDateFormat .

le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers le java.temps classes.

pour en savoir plus, voir le Oracle Tutorial . Et rechercher le débordement de la pile pour de nombreux exemples et explications. La spécification est JSR 310 .

où obtenir le java.les classes de temps?

le ThreeTen-Extra le projet s'étend java.temps avec des cours supplémentaires. Ce projet est un terrain d'expérimentation pour d'éventuelles futures additions à java.temps. Vous pouvez trouver ici quelques cours utiles tels que: Interval , YearWeek , YearQuarter , et plus .

5
répondu Basil Bourque 2018-02-02 03:31:09
la source

j'ai utilisé encore une autre astuce pour formater la date avec une précision à 6 chiffres (microsecondes):

System.out.println(
    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.").format(microseconds/1000)
    +String.format("%06d", microseconds%1000000));

cette technique peut être étendue à des nanosecondes et plus.

1
répondu tutejszy 2014-06-27 17:47:04
la source

utilisez java.SQL.Timestamp.toString si vous voulez obtenir fraction de secondes dans la représentation de texte. La différence entre Timestamp de DB et Java Date est que la précision de DB est de nanosecondes tandis que la précision de Java Date est de millisecondes.

0
répondu Evgeniy Dorofeev 2013-10-07 15:19:38
la source

SSSSSS est en microsecondes. Disons que le temps est 10: 30: 22 (secondes 22) et 10: 30: 22.1 serait 22 secondes et 1/10 d'une seconde . En étendant la même logique, 10: 32.22.000132 serait de 22 secondes et 132/1000, 000 d'une seconde, ce qui n'est rien d'autre que des microsecondes.

-2
répondu user9301292 2018-02-01 20:26:42
la source

Autres questions sur