2016-11-07 2 views
0

J'ai besoin de sauvegarder les Date actuels + 7 jours en format iso8601 comme suit:Comment enregistrer iso8601 Date en Java?

20161107T12:00:00+0000 

Lorsque la partie après la "T" est fixée.

J'ai essayé les éléments suivants:

Calendar exDate1 = Calendar.getInstance(); 
exDate1.add(Calendar.DATE , 7); 
Date Date1 = exDate1.getTime(); 
SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMDD"); 
String Date = sdf.format(Date1 + "T12:00:00+0000"); 

sans succès.

+1

s'il vous plaît consulter http://stackoverflow.com/questions/2201925/converting-iso-8601-compliant-string-to-java-util-date –

+4

'String Date = sdf.format (Date1) +" T12: 00: 00 + 0000 ";'. Suivez également les conventions de dénomination Java. N'utilisez pas de noms en majuscules pour vos variables. – AJPerez

Répondre

1

Une autre façon utilise le nouveau java.time -API en Java-8:

String result = 
    DateTimeFormatter.BASIC_ISO_DATE.format(
     LocalDate.now(ZoneOffset.UTC).plusDays(7) 
    ) + "T12:00:00+0000"; 
System.out.println(result); // 20161114T12:00:00+0000 

Mise à jour en raison de votre choix de décalage horaire:

Vous avez essayé d'utiliser implicitement le fuseau horaire du système pour déterminer l'heure locale actuelle, mais appliquez un décalage fixe de UTC + 0000. C'est une combinaison incohérente. Si vous appliquez un tel décalage d'origine, vous devez également déterminer la date actuelle en fonction de UTC + 0000, pas dans le fuseau horaire de votre système (ZoneId.systemDefault()).

La proposition de rédacteur en chef @Nim

alternative - la chaîne ci-dessus peut ne pas avoir le bon décalage:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd'T'HH:mm:ssZ"); 
String date = LocalDate.now().plusDays(7).atTime(12, 0).atZone(ZoneId.systemDefault()).format(formatter); 

produirait le résultat:

20161114T12: 00: 00 + 0100

ce qui n'est probablement pas ce que vous voulez. J'essaie aussi d'éviter l'expression LocalDate.now() sans aucun argument car elle cache la dépendance sur le fuseau horaire du système.

1

utiliser cette « yyyyMMdd'pattern

Calendar currentDate = Calendar.getInstance(); 
    currentDate.add(Calendar.DATE, 7); 
    Date date = currentDate.getTime(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 

    String formattedDate = sdf.format(date).concat("T12:00:00+0000");