输入字符串如下所述
20110913T100702.631 GMT
需要的输出是这样的格式
2011年9月13日,星期二,17:52:PM
你能帮我解决这个问题。 (在此示例中,输入值和输出值未连接,它们是2个单独的值)
答案 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)
您需要类SimpleDateFormat或DateFormat http://javatechniques.com/blog/dateformat-and-simpledateformat-examples/
答案 2 :(得分:0)
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格式的“基本”版本的格式。单词 basic 意味着最大限度地减少ISO 8601格式的更常见“扩展”版本所使用的分隔符的使用。
String input = "20110913T100702.631 GMT" ;
其他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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。