2016-04-26 2 views
0

Voici mon code en Java 1.6 (question a été double marqué, mais la solution proposée fait référence à Java 1,8)Problèmes avec la conversion d'horodatage

public static void main(String[] args){ 
    try{ 
     String dateTimeString = "2015-08-10-14.20.40.679279"; 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSSSSS"); 
     java.util.Date formattedDate = dateFormat.parse(dateTimeString); 
     Timestamp formattedTime = new Timestamp(formattedDate.getTime()); 
     System.out.println(formattedTime); 
    } catch (Throwable t){ 
     t.printStackTrace(); 
    } 
} 

L'objet donné est: 2015-08-10 14:31:59.279, si bien que quelque chose est mal lors de l'analyse minutes, secondes et millis, je ne sais pas exactement quoi.
Merci!

+1

Qu'est-ce que '679279'? millis (ne regarde pas bien)? fraction de secondes (c'est-à-dire microsecondes, auquel cas vous devez vous débarrasser des trois derniers chiffres car l'API de date ne prend en charge que les millis)? – assylias

+0

La majeure partie de la fonctionnalité Java 8 (java.time) mentionnée ci-dessus est rétroportée sur Java 6 & 7 dans le projet [ThreeTen-Backport] (http://www.threeten.org/threetenbp/). Une grande amélioration par rapport aux classes héritées gênantes que vous utilisez ici. Et les classes java.time utilisent une résolution de l'ordre de la nanoseconde (9 décimales) afin de pouvoir traiter vos données microsecondes (6 décimales) sans perte de données et sans tracas. –

Répondre

2

Il n'y a pas quelque chose comme SSSSSS. Vérifier Simple Date Format manual

+0

Oui, ça dit "millis", donc vous pensez que si je mets SSS, ça marchera bien avec l'entrée de 6 chiffres? – urir

+0

Non, ce ne sera pas le cas. Tronque juste les 3 derniers chiffres. – mariusz2108

+0

Merci, je suppose que je n'ai pas d'autre choix que de perdre ces données – urir

1

Vous devez abandonner les 3 derniers msec:

Date d = (new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS", Locale.US)).parse("2015-08-10-14.20.40.679279"); 
     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)); 

     Date dd = (new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS", Locale.US)).parse("2015-08-10-14.20.40.679"); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.S").format(dd)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SS").format(dd)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS").format(dd)); 

pour obtenir la mise en forme à droite:

2015-08-10-14.31.59.279 
2015-08-10-14.31.59.279 
2015-08-10-14.31.59.279 
2015-08-10-14.20.40.679 
2015-08-10-14.20.40.679 
2015-08-10-14.20.40.679 

Check it out ce playground.

+0

Merci, ça a l'air bien – urir