2012-09-13 91 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”)'。 –

相关问题