2013-06-28 3 views
2

내 코드에 문제가있어서 방금 이유를 찾았지만 해결 방법을 모릅니다.다른 서버에서 SimpleDateFormat 문제가 발생했습니다.

1369033200000 

하지만 아마존 서버에 동일한 코드를 실행할 때, 출력은 다음과 같습니다 :

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
long processingTime = df.parse("2013-05-20").getTime(); 
System.out.println(processingTime); 

출력은 다음과 같습니다

1369008000000 
나는 내 노트북에 다음 코드를 실행하는 경우

어떻게 해결할 수 있습니까?

+0

두 컴퓨터의 표준 시간대 및/또는 로캘 설정이 다를 수 있습니다. – stakx

답변

2

시간대를 지정해야합니다.

http://mvnrepository.com/artifact/joda-time/joda-time/2.2

는에서보세요 :

http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormatter.html

을 그리고 타임 존 및 로케일을 지정 더 나은 훨씬 더 적합 날짜 작업이다에서의 joda 라이브러리를 사용합니다. 당신이 비슷한 질문을 좀 걸릴 수 있습니다

: new Date(long) gives different results

편집 :

내가 당신을 위해 단위 테스트 썼다가 정확한지 확인하기 위해

@Test 
    public void testPattern(){ 
     DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd") 
       .withLocale(Locale.ENGLISH) 
       .withZone(DateTimeZone.UTC); 
     long time = formatter.parseDateTime("2013-05-20").getMillis(); 
     assertEquals(1369008000000L, time); 

    } 

을, 당신은 단위 테스트를 실행할 수 있습니다 (나는 junit 테스트를 실행하기 위해 maven surefire 플러그인을 사용합니다). 그러나이 인수는 모든 jvm에서 작동합니다 :

첫째는 예컨대, 하나 개의 영역에 그것을 실행 해보십시오 :

-Duser.timezone="Europe/Amsterdam' 

그런 다음 다른 영역에서 실행하려고, 예컨대 :

-Duser.timezone="Pacific/Honolulu' 

그런 다음 당신의 단위 테스트는 호의 어느 하나에 해당하는 경우에는 실패해서는 안된다.

관련 문제