2011-04-07 82 views
2

我正在嘗試使用Java的SimpleDateFormat將字符串轉換爲正確的日期格式。由於某些原因,它不適用於「Mar」,「May」,「Oct」和「Dec」等某些月份。有人能幫助我嗎?它在其他所有月份都能正常工作。將字符串轉換爲格式化日期

import java.sql.Date; 
import java.text.SimpleDateFormat; 

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException; 

public class test { 
    public static void main(String args[]) throws java.text.ParseException { 
     try { 
      SimpleDateFormat parse = new SimpleDateFormat("dd. MMM yyyy hh:mm:ss"); 
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

      //why this doesn't work with certain months like Mar, May, Oct, and Dec? otherwise it works fine 

      String dateTime = "01. Jun 2010 15:30:32"; 
      //String dateTime = "07. Mar 2011 15:20:10"; 
      //String dateTime = "07. May 2011 15:20:10"; 
      //String dateTime = "07. Oct 2011 15:20:10"; 
      //String dateTime = "07. Dec 2011 15:20:10"; 


      java.util.Date parsed =parse.parse(dateTime); 
      System.out.println("formatted: " + formatter.format(parsed)); 
     } catch(ParseException e) { 
      System.out.println("Caught " + e); 
     } 
    } 
}  
+1

我試着運行你的代碼,它爲我完美工作。你面臨的問題是什麼?順便說一句,你應該抓住'java.text.ParseException'而不是'com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException' – Nishan 2011-04-07 13:05:44

+0

添加'com.sun。*'包來忽略列表中的內容IDE自動建議列表。 – BalusC 2011-04-07 13:24:08

回答

4

您需要設置語言環境SimpleDateFormat,否則平臺默認的區域將被用於月份名稱。你可以通過將它作爲2nd argument to the SimpleDateFormat constructor來做到這一點。如果您想使用英文格式的月份名稱,請通過Locale.ENGLISH

new SimpleDateFormat("dd. MMM yyyy hh:mm:ss", Locale.ENGLISH); 

順便說一句,你可以通過

System.out.println(Locale.getDefault()); 

這是在操作系統級別configureable(在Windows的控制面板,例如)和JVM參數瞭解你的平臺默認的語言環境。

+0

謝謝...它幫助.... – user523956 2011-05-12 13:58:40

+0

不客氣。既然你是新來者,不要忘了標記答案,只要它有助於回答問題。另見http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work。 – BalusC 2011-05-12 14:03:19

相關問題