2016-11-07 63 views
0

我需要將當前Date + 7天iso8601格式保存如下:如何在Java中保存iso8601日期?

20161107T12:00:00+0000 

"T"之後的部分是固定的。

我試過如下:

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

沒有成功。

+1

請查看http://stackoverflow.com/questions/2201925/converting-iso-8601-compliant-string-to-java-util-date –

+4

'String Date = sdf.format(Date1)+「T12: 00:00 + 0000" ;'。此外,請遵循Java命名約定 - 不要爲變量使用大寫名稱 – AJPerez

回答

1

另一種方法是使用新java.time -API在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 

更新由於您選擇時區偏移:

您試圖隱式使用系統時區來確定當前本地時間,但應用UTC + 0000的固定偏移量。這是一個不一致的組合。如果應用這種零點偏移,則還應根據UTC + 0000確定當前日期,而不是在系統時區(ZoneId.systemDefault())中。

@Nim

或者編輯的建議 - 上面的字符串可能沒有正確的偏移:

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

將產生的結果是:

20161114T12: 00:00 + 0100

這可能不是你想要的。我也嘗試避免沒有任何參數的表達式LocalDate.now(),因爲它隱藏了對系統時區的依賴關係。

1

使用這種「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");