2011-04-07 7 views
2

Java의 SimpleDateFormat을 사용하여 문자열을 적절한 날짜 형식으로 변환하려고합니다. 어떤 이유로 3 월, 5 월, 10 월, 12 월과 같은 특정 월에는 작동하지 않습니다. 누군가 나를 도울 수 있습니까? 다른 모든 달에는 정상적으로 작동합니다.문자열을 형식이 지정된 날짜로 변환

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

코드를 실행 해 보았는데 완벽하게 작동했습니다. 당신이 직면 한 문제는 무엇입니까? BTW, 당신은'com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException'가 아닌'java.text.ParseException'을 잡아야 만합니다. – Nishan

+0

'com.sun. *'패키지를 IDE autosuggest list. – BalusC

답변

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()); 

이 (예를 들어, 윈도우 제어판의) OS 수준에서 구성 가능하다 의해 JVM 인수로 플랫폼 기본 로케일에 대해 배울 수 있습니다.

+0

고마워요 ... 도왔습니다 .... – user523956

+0

당신을 진심으로 환영합니다. 당신이 여기 새로 왔기 때문에 질문에 대답 할 때 도움이 될 때마다 대답을 표시하는 것을 잊지 마십시오. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work를 참조하십시오. – BalusC

관련 문제