2012-07-22 105 views
0

我有幾個日期的字符串:SimpleDateFormat的解析函數改變格式

[20-JUL-2012 5:11:36670 UTC PM,20-JUL-2012 5:11:36683 UTC PM]

ParsePosition parsePos = new ParsePosition(1); 
SimpleDateFormat format2 = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss,SSS z a"); 
System.out.println(format2.parse(entry.getValue().toString(), parsePos)) ; 

輸出:Fri Jul 20 06:11:36 BST 2012

我需要的輸出爲20-Jul-2012 5:11:36,670 UTC PM

我是否需要在SimpleDateFormat中設置LOCALE以使其不具有不同的輸出?

+0

possibl e [從String java提取日期]的副本(http://stackoverflow.com/questions/11599591/extract-date-from-string-java) – 2012-07-22 12:32:10

+0

這是同一個問題嗎?如果沒有,請在這裏編輯這一個,以清楚地區別於您的其他問題...或幾天前您問過的問題:http://stackoverflow.com/questions/11507845/error-using-simpledateformat – 2012-07-22 12:32:59

回答

2

您需要設置時區,但更重要的是,你只需要實際使用的格式來格式化日期:

Date date = format2.parse(...); 
String formattedDate = format2.format(date); 
System.out.println(formattedDate); 

你的代碼所做的是:

Date date = format2.parse(...); 
System.out.println(date.toString()); 

我雖然並不真正理解將字符串解析爲日期,然後使用完全相同的格式顯示日期,但(除了驗證字符串確實是有效日期,但是可以簡單地重新使用原始字符串) 。

1

你有兩個小問題:

  1. 使用hh的小時,不HHH是「一天中的小時(0-23),因此無法與上午/下午的標記a一起正常工作。您的兩個示例日期字符串將解析爲AM,而不是PM。
  2. 您正在使用SimpleDateFormat解析字符串,但不進行格式化使用format2.format(format2.parse(entry.getValue().toString())

這裏有一個完整的例子:。

SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss,SSS z a"); 
String input = "20-Jul-2012 5:11:36,670 UTC PM"; 
Date date = format.parse(input); 
String output = format.format(date); 
System.out.println(output); 

結果:

20-Jul-2012 05:11:36,670 UTC PM