2012-06-27 4 views
3

DateString으로 변환하고 다시 Date으로 변환하려고합니다. 그러나 최종 날짜가 원래 날짜와 다르다는 것을 알았습니까?Java에서 날짜로 문자열을 변환하고 뒤로 잘못 입력했습니다.

//1975-06-20 
    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.YEAR, 1975); 
    cal.set(Calendar.MONTH, 5); 
    cal.set(Calendar.DAY_OF_MONTH, 20); 
    cal.set(Calendar.HOUR, 0); 
    cal.set(Calendar.MINUTE, 0); 
    cal.set(Calendar.SECOND, 0); 
    System.out.println(cal); 

    Date originalDate = cal.getTime(); 
    System.out.println("Date 1: " + originalDate.toString()); 

    SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); 
    Date date = sdf.parse(originalDate.toString()); 
    System.out.println("Date 2: " + date.toString()); 

상기 코드의 출력은 다음 이유 때문에 1982 (+ 30 분)에 싱가포르 시간대 변경 아마도

cal: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Singapore",offset=28800000,dstSavings=0,useDaylight=false,transitions=9,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1975,MONTH=5,WEEK_OF_YEAR=26,WEEK_OF_MONTH=5,DAY_OF_MONTH=20,DAY_OF_YEAR=179,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=0,HOUR_OF_DAY=16,MINUTE=0,SECOND=0,MILLISECOND=333,ZONE_OFFSET=28800000,DST_OFFSET=0] 
Date 1: Fri Jun 20 12:00:00 SGT 1975 
Date 2: Fri Jun 20 11:30:00 SGT 1975 
+2

[일정] (http://docs.oracle.com/javase/6 /docs/api/java/util/Calendar.html)는 로켈 인식이며 Date는 그렇지 않습니다. 자세한 내용은 [이 게시물을 참조하십시오] (http://stackoverflow.com/questions/2697549/how-to-make-date-locale-independent) – Brad

+5

DateFormat.format (String, String) 메서드는 없습니다. 코드가 컴파일되지 않습니다. 그리고 Date의 toString() 표현을 포맷팅 할 때 요점은 무엇입니까? 왜 포맷 된 날짜를 파싱하지 않고 originalDate의 toString()을 파싱합니까? –

+0

@Brad, [안 그래?] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Date.java#Date. toString % 28 % 29) – JMelnik

답변

13

.

http://www.timeanddate.com/worldclock/timezone.html?n=236&syear=1980

SimpleDateFormat의 날짜를 구문 분석 할 때 UTC + 8로 SGT을, 그리고 1982 년이 따라서 날짜 30 분으로 해제되기 전에 SGT이다 UTC + 7.5로 변환.

+0

이것은 30 분의 차이점을 설명하고 있지만, 원래 시간의 "시간"이'cal.set (Calendar. HOUR, 0)'. @ 로스디,이 질문에 오타가 있습니까? – Brad

+0

@ 브래드 :'HOUR'은 오전/오후 (12 시간주기)의 시간이고 싱가포르의 현재 오후 ('.getInstance()'에 영향을 미침), 코드가 'HOUR'을 0으로 설정하십시오.'HOUR_OF_DAY'는 하루 24 시간을 설정합니다. – nhahtdh

+0

@Brad 오타가 아니라. –

0

코드를 붙여 넣으시겠습니까?

날짜 날짜 = DateFormat.format (originalDate.toString(), "EEE MMM dd HH : mm : ss zzz yyyy");

는 문제가 보인다 서명 날짜 써, DateFormat.format (문자열, 문자열) 아무 방법은 내가 아는 한 없다

+0

해당 부분을 제거했습니다. 우리 팀이 만든 유틸리티 클래스입니다. 미안합니다. 그러나 제 질문은 여전히 ​​유효합니다. –

관련 문제