문제

이메일 헤더에서 문자열이 있습니다. Date: Mon, 27 Oct 2008 08:33:29 -0700. 내가 필요로하는 것은 그레고리안 캘린더의 사례이며, 그것은 같은 순간을 나타냅니다. 쉽게 - 어떻게해야합니까?

그리고 가장 빠른 것들에게 - 이것은입니다 ~ 아니다 제대로 작동하기 :

SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)

시간대를 UTC (또는 Java 버전에 따라 로컬 기계 시간)로 정상화하기 때문입니다. 내가 필요한 것은 calendar.gettimezone (). -7 * milisInAnHour.

도움이 되었습니까?

해결책

옵션이라면 Joda Time Library를 살펴 보는 것이 좋습니다. 나는 일반적으로 핵심 플랫폼이 비슷한 기능을 제공 할 때 타사 라이브러리를 사용하지 않지만 Joda Time의 저자가 JSR310 뒤에 있기 때문에이를 예외로 만들었고 Joda Time은 기본적으로 기본적으로 Java 7으로 롤링 될 것입니다.

http://joda-time.sourceforge.net/

어쨌든 Joda Time이 옵션이라면 이와 같은 것 ~해야 한다 일하다:

DateTimeFormatter formatter =
    DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();

이게 도움이 되길 바란다.

다른 팁

그리고 가장 빠른 것들의 경우 - 이것은 제대로 작동하지 않을 것입니다 ... 시간대를 UTC (또는 Java 버전에 따라 로컬 기계 시간)로 정상화하기 때문입니다. 내가 필요한 것은 calendar.gettimezone (). getRawoffset ()에게 -7 * milisinanhour를 반환합니다.

기술적으로 이것은 작동합니다. 현재 시스템 시간대와 동일한 타임 존의 물체를 반환하지만 오프셋을 설명하기 위해 시간이 수정되기 때문입니다.

이 코드 :

String dateString = "Mon, 27 Oct 2008 08:33:29 -0700";
DateFormat df = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss Z");
Date parsed = df.parse(dateString);
System.out.println("parsed date: " + parsed);

Calendar newCalendar = Calendar.getInstance();
newCalendar.setTime(parsed);

출력 :

구문 분석 날짜 : 월 27 일 11:33:29 EDT 2008

내 시스템 시간대는 EDT / UTC 마이너스 4 시간 (3 시간 앞서)이기 때문에 기술적으로 정확합니다. 1970 년 1 월 1 일부터 00:00:00 GMT 이후 시간을 밀리 초로 표현하는 경우 Date 객체는 날짜/시간을 저장하고,이 날짜/시간은 동일합니다. 단지 다른 시간대입니다.

당신의 문제는 실제로입니다 날짜/달력을 내 시간대로 어떻게 변환합니까? 이를 위해 이전 질문에 대한 내 응답을 살펴보십시오. Java를 사용하여 달력 타임 존을 처리하는 방법은 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top