2015-03-02 67 views
0

我有這種格式的日期:印尼時報SimpleDateFormat的

Tue Mar 03 00:00:00 WIB 2015 

我如何格式化成:

2015-03-03 

我目前的嘗試:

val today_date = new LocalDate() 
val formatIncoming = new java.text.SimpleDateFormat("EEE MMM dd HH:mm:ss z YYYY") 
val formatOutgoing = new java.text.SimpleDateFormat("yyyy-MM-dd") 
formatOutgoing.format(formatIncoming.parse(data.cheque_date.toString)) 
//output 
2014-12-30 

任何解決方案?

回答

1

首先要注意:類名LocalDate看起來像喬達時間,但你必須使用SimpleDateFormat因爲喬達時間無法解析時區名稱或縮寫。

第二個:您的解析模式是錯誤的,並且使用YYYY而不是yyyy(Y是星期幾的日期,而不是正常的日曆年)。使用Y會導致錯誤的日期輸出。

第三:由於輸入中有英文標籤(尤其是如果您的默認語言環境不是英語 - 否則您會得到例外),因此有必要將語言環境指定爲英語。

第四個:模式字母z是正確的,將處理像「WIB」這樣的時區名稱。再說一遍:在這裏指定語言環境很重要。在給出的另一個答案中使用「Z」通常表示時區偏移量,但根據Javadoc可用於解析時區名稱。所以爲了清晰起見,我建議使用「z」(正如你所做的那樣)。

SimpleDateFormat formatIncoming = 
    new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); 
SimpleDateFormat formatOutgoing = new SimpleDateFormat("yyyy-MM-dd"); 
TimeZone tz = TimeZone.getTimeZone("Asia/Jakarta"); 
System.out.println(tz.getDisplayName(false, TimeZone.SHORT, Locale.ENGLISH)); // WIB 

formatOutgoing.setTimeZone(tz); 
String s = formatOutgoing.format(formatIncoming.parse("Tue Mar 03 00:00:00 WIB 2015")); 

System.out.println("Date in Indonesia: " + s); // 2015-03-03