2017-08-13 83 views
-5

我試圖日期轉換格式Java字符串到日期負數

07/Mar/2004:16:56:39 -0800 

到日期對象。我不確定這個格式的名字甚至是什麼,但它在tomcat訪問日誌中使用。有人可以幫我嗎?

SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy:HH:mm:ss"); 
Date d = f.parse("07/Mar/2004:16:56:39 -0800"); // Throws exception. 
System.out.println(d.getTime()); 
+0

也重複(https://stackoverflow.com/q/11527451/642706)和[this](https://stackoverflow.com/q/882420/642706)和[this](https:// stackoverflow。 com/q/21042484/642706)等等。 –

+1

只是爲了記錄,這個「負數」是[UTC偏移量](https://en.wikipedia.org/wiki/ISO_8601?oldformat=true#Time_offsets_from_UTC) – 2017-08-13 22:21:52

回答

0

您需要的時區添加到您的日期格式和格式更改爲您輸入的字符串(/,而不是-):

SimpleDateFormat f = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.US); 

請參閱該文檔:https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

+1

'-'應該是'/' – luk2302

+0

@ luk2302在我回答的那一刻,我也看到了這一點。 – bish

+0

f.parse(「07/Mar/2004:16:56:39/0800」);拋出異常,但。 – newToScala

-1

你有錯字排行:

Date d = f.parse("07/Mar/2004:16:56:39 -0800");

日期格式爲「dd-MMM-yyyy:HH:mm:ss」。您需要用「 - 」替換「/」。此外,需要圍繞你的解析函數與try-catch塊如下:

SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy:HH:mm:ss"); 
    Date d; 
    try { 
     d = f.parse("07-Mar-2004:16:56:39"); 
     System.out.println(d.getTime()); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

看看這個鏈接,瞭解更多有關的SimpleDateFormat類: http://www.xyzws.com/javafaq/how-to-use-simpledateformat-class-formating-parsing-date-and-time/142

+1

不可以。日期的格式使用'/'並且有一個時區。要求是找出正確的格式字符串,以便給出的輸入可以被解析,而不是相反。 – Andreas

2

格式字符串應該匹配輸入。特別是,分離器必須匹配。

此外,您的格式字符串缺少時區部分以匹配-0800

由於您的輸入使用英文月份名稱,因此應明確指定該名稱使用Locale.US

SimpleDateFormat f = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.US); 
Date d = f.parse("07/Mar/2004:16:56:39 -0800"); 
System.out.println(d); 

由於我在東部時區來的,是打印:

Sun Mar 07 19:56:39 EST 2004


但是,您應該使用新java.time類來代替。

由於輸入字符串具有時區偏移量,這意味着你應該解析字符串到OffsetDateTime,使用DateTimeFormatter

DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MMM/uuuu:HH:mm:ss Z", Locale.US); 
OffsetDateTime dt = OffsetDateTime.parse("07/Mar/2004:16:56:39 -0800", f); 
System.out.println(dt); 

輸出是:

2004-03-07T16:56:39-08:00