2012-09-13 88 views
4

我想將字符串日期轉換爲特定時區和特定格式的日期時間對象。我該怎麼做 ?喬達時間 - 將字符串轉換爲具有特定時區並以特定格式的日期時間

字符串日期可以是世界上使用的任何格式。示例MM-DD-YYYY,YYYY-MM-DD,MM/DD/YY ,MM/DD/YYYY等。TimeZone可以是用戶指定的任何合法時區。

示例 - 將太平洋時區的YYYY-MM-DD轉換爲MM/DD/YY。

+0

小心給'特定'字符串,時區和格式? –

+0

@AlexanderPogrebnyak - 完成。 –

+0

[Joda Time]有一些例子(http://joda-time.sourceforge.net/quickstart.html) – Pao

回答

7

使用DateTimeFormatterBuilder建立一個格式,它能夠解析/格式的多個DateTimeFormat S,並設置導致DateTimeFormatter使用指定DateTimeZone

DateTimeParser[] parsers = { 
    DateTimeFormat.forPattern("MM-dd-yyyy").getParser(), 
    DateTimeFormat.forPattern("yyyy-MM-dd").getParser(), 
    DateTimeFormat.forPattern("MM/dd/yyyy").getParser(), 
    DateTimeFormat.forPattern("yyyy/MM/dd").getParser() 
}; 

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
    .append(null, parsers) 
    .toFormatter() 
    .withZone(DateTimeZone.UTC); 

DateTime dttm1 = formatter.parseDateTime("01-31-2012"); 
DateTime dttm2 = formatter.parseDateTime("01/31/2012"); 
DateTime dttm3 = formatter.parseDateTime("2012-01-31"); 

要格式化給DateTime你可以只使用dttm1.toString("yyyy-MM-dd"))

+0

我添加了一些行並得到了一個輸出。 System.out.println(dttm1); System.out.println(dttm2); System.out.println(dttm3); 輸出爲 - 2012-01-31T00:00:00.000Z 2012-01-31T00:00:00.000Z 2012-01-31T00:00:00.000Z –

+0

我不能夠正確地理解代碼。這是否將解析器中的所有4種格式轉換爲「YYYY-MM-DD」+ 0格式?我如何刪除所有這些零? –

+1

@davidblaine:那是因爲你有一個'DateTime'對象。如果你只是想要一個格式爲「YYYY-MM-DD」的字符串,可以調用'dttm1.toString(「YYYY-MM-DD」)'。 –

相關問題