2015-06-16 89 views
1

我正在開發一個使用oracle MAF的移動應用程序。 Oracle MAF提供日期組件,如果我選擇日期,則輸出如下:2015-06-16T04:35:00.000Z對於選定日期Jun 16, 2015 10:05 AM爲什麼java日期不可解析?

我試圖用.ical(ICalendar日期格式)將此格式轉換爲「Indian Standard Time」,對於所選日期Jun 16, 2015 10:05 AM應該是20150613T100500。我使用下面的代碼:

SimpleDateFormat isoFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss"); 
isoFormat.setTimeZone(TimeZone.getTimeZone("IST")); 
String start_date_time = isoFormat.parse("20150616T043500000Z").toString(); 

但它返回日期時間爲:

Tue Jun 16 04:35:00 GMT+5:30 2015 

而且應該是這樣的:

20150616T100500 
+0

模式'yyyyMMdd'T'HHmmss'與'2015-06-16T04:35:00.000Z '?也許'yyyy-MM-dd'T'HH:mm:ss.SSSSZ'可能會有效 – MadProgrammer

+0

對於'yyyyMMdd'T'HHmmss'的格式,您需要使用'20150613T100500'作爲解析的值。 – MadProgrammer

+1

感謝解決的異常,我使用20150616T043500000Z作爲字符串,但它返回「Tue Jun 16 04:35:00 GMT + 5:30 2015」,轉換爲像20150613T100500這樣的塊的方式是什麼,以及它爲什麼顯示時間爲04 :35,而我的時間是10:05。 – Himanshu

回答

1

你需要從2015-06-16T04:35:00.000Z UTC解析值到java.util.Date

SimpleDateFormat from = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
from.setTimeZone(TimeZone.getTimeZone("UTC")); 
Date start_date_time = from.parse("2015-06-16T04:35:00.000Z"); 

這給我們java.util.DateTue Jun 16 14:35:00 EST 2015(對我來說)。

然後,你需要在IST

SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss"); 
outFormat.setTimeZone(TimeZone.getTimeZone("IST")); 
String formatted = outFormat.format(start_date_time); 
System.out.println(formatted); 

,輸出20150616T100500

的Java 8時API

只是因爲它是很好的做法,格式化這個...

// No Time Zone 
    String from = "2015-06-16T04:35:00.000Z"; 
    LocalDateTime ldt = LocalDateTime.parse(from, DateTimeFormatter.ISO_ZONED_DATE_TIME); 

    // Convert it to UTC 
    ZonedDateTime zdtUTC = ZonedDateTime.of(ldt, ZoneId.systemDefault()).withZoneSameInstant(ZoneId.of("UTC")); 

    // Convert it to IST 
    ZonedDateTime zdtITC = zdtUTC.withZoneSameInstant(ZoneId.of("Indian/Cocos")); 
    String timestamp = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss").format(zdtITC); 
    System.out.println(timestamp); 

NB:如果我沒有解析到LocalDateTime的值,則轉換這是UTC,我出了一個小時,但我願意知道更好的方式

0

供應格式應爲"yyyy-MM-dd'T'HH:mm:ss"

public static void main(String[] args) { 
    SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
    isoFormat.setTimeZone(TimeZone.getTimeZone("IST")); 
    try { 
     Date start_date_time = isoFormat.parse("2015-06-16T04:35:00.000Z"); 
     System.out.println(start_date_time); 
     SimpleDateFormat output = new SimpleDateFormat("yyyyMMdd'T'HHmmss"); 
     String formattedTime = output.format(start_date_time); 
     System.out.println(formattedTime); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
} 

輸出

Tue Jun 16 04:35:00 IST 2015 
20150616T043500 
+0

我想先詳細地閱讀一下這個問題 – MadProgrammer

+0

@MadProgrammer corrected –

+0

不應該以'20150616T100500'出現嗎? – MadProgrammer

0

一些補充的格式,並在日期字符串正確的TZ:

SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz"); 
isoFormat.setTimeZone(TimeZone.getTimeZone("IST")); 
String start_date_time = isoFormat.parse("2015-06-16T04:35:00.000CEST").toString();