Java日期格式

时间:2011-09-13 12:26:47

标签: java parsing date format

输入字符串如下所述

  

20110913T100702.631 GMT

需要的输出是这样的格式

  

2011年9月13日,星期二,17:52:PM

你能帮我解决这个问题。 (在此示例中,输入值和输出值未连接,它们是2个单独的值)

3 个答案:

答案 0 :(得分:2)

尝试:

private String formatDate() throws Exception {
    DateFormat inputFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss.SSS Z");
    DateFormat outputFormat = new SimpleDateFormat("EEEEE', 'MMMMM' 'dd', 'yyyy' 'h:mm:a");
    Date date = inputFormat.parse("20110913T100702.631 GMT ");
    return outputFormat.format(date);
}

答案 1 :(得分:1)

答案 2 :(得分:0)

TL;博士

ZonedDateTime.parse (
    "20110913T100702.631 GMT" , 
    DateTimeFormatter.ofPattern( "uuuuMMdd'T'HH:mm:ss.SSS z" )
).format( 
     DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL , FormatStyle.SHORT )
                      .withLocale( Locale.US )
 )
  

2011年9月13日星期二上午10:07

ISO 8601

您的输入字符串几乎符合定义为标准ISO 8601格式的“基本”版本的格式。单词 basic 意味着最大限度地减少ISO 8601格式的更常见“扩展”版本所使用的分隔符的使用。

String input = "20110913T100702.631 GMT" ;

使用java.time

其他Answers使用麻烦的旧遗留日期时间类,现在由java.time类取代。

在解析/生成字符串时,java.time类默认使用许多标准ISO 8601格式。因此通常不需要指定格式化模式。但默认情况下不支持此特定的基本格式,因此我们必须指定格式化模式。

DateTimeFormatter fInput = DateTimeFormatter.ofPattern ( "uuuuMMdd'T'HHmmss.SSS z" );

解析为ZonedDateTime

ZonedDateTime zdt = ZonedDateTime.parse ( input, fInput );

要生成表示所需格式的ZonedDateTime对象值的字符串,可以定义指定的格式设置模式。但我建议你让java.time自动为你本地化。

要进行本地化,请指定:

  • FormatStyle确定字符串的长度或缩写。
  • Locale确定(a)翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大写,标点符号,分隔符等问题的文化规范

因此...

// Generate output string
Locale locale = Locale.US;  // Or Locale.CANADA_FRENCH, Locale.ITALY, etc.
DateTimeFormatter fOutput =
    DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL, FormatStyle.SHORT ) // Specify format style of date portion, then time-of-day portion.
                     .withLocale ( locale );
String output = zdt.format ( fOutput );

转储到控制台。

// Dump to console
System.out.println ( "input: " + input );
System.out.println ( "zdt.toString(): " + zdt );
System.out.println ( "output: " + output );

请参阅this code run live at IdeOne.com

  

输入:20110913T100702.631 GMT

     

zdt.toString():2011-09-13T10:07:02.631Z [GMT]

     

输出:2011年9月13日星期二上午10:07

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore