문제

다음과 같은 날짜를 나타내는 문자열이 있다고 가정 해 봅시다.

"Wed 7 월 8 일 17:08:48 GMT 2009"

그래서 나는 그 문자열이 다음과 같은 날짜 개체로 구문 분석합니다.

DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZ yyyy");
Date fromDate = (Date)formatter.parse(fromDateString);

그것은 나에게 올바른 날짜 개체를 준다. 이제이 날짜를 CDT 값으로 표시하고 싶습니다.

나는 많은 것을 시도했고, 그것을 올바르게 작동시킬 수는 없습니다. DateFormat 클래스를 사용하여이를 작동시키기 위해 간단한 방법이 있어야합니다. 어떤 충고? 마지막 시도는 이것이었습니다.

formatter.setTimeZone(toTimeZone);
String result = formatter.format(fromDate);
도움이 되었습니까?

해결책

"zzz"대신 "zzz"를 사용하십시오. "z"는 RFC822 시간대의 기호입니다.

DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");

말하지만, 날짜/시간에 대한 나의 표준 조언은 사용하는 것입니다. 조다 시간, 이것은 완전히 더 나은 API입니다.

편집 : 짧지 만 완전한 프로그램 :

import java.text.*;
import java.util.*;

public class Test
{
    public List<String> names;

    public static void main(String [] args)
        throws Exception // Just for simplicity!
    {
        String fromDateString = "Wed Jul 08 17:08:48 GMT 2009";
        DateFormat formatter = new SimpleDateFormat
            ("EEE MMM dd HH:mm:ss zzz yyyy");
        Date fromDate = (Date)formatter.parse(fromDateString);
        TimeZone central = TimeZone.getTimeZone("America/Chicago");
        formatter.setTimeZone(central);
        System.out.println(formatter.format(fromDate));
    }
}

출력 : Wed 7 월 8 일 12:08:48 CDT 2009

다른 팁

사용 :

formatter.setTimeZone(TimeZone.getTimeZone("US/Central"));

출력 :

Wed Jul 08 12:08:48 CDT 2009

내 컴퓨터의 예제의 날짜. 그것은 형식 문자열로 zzz를 zzz로 대체 한 후입니다.

오래된 스레드를 파헤쳐 죄송합니다. 그러나 나는 모든 시간대 ID를 지속적인 클래스로 보유하는 Java 클래스가 있는지 궁금합니다. 따라서 시간대를 설정하는 동안 시간대를 하드 코딩하는 대신 다음과 같이 시간대를 설정합니다.

formatter.setTimeZone(TimeZone.getTimeZone("US/Central"));

대신 더 표준/유니폼을 입을 것입니다.

formatter.setTimeZone(TimeZone.getTimeZone(SomeConstantClass.US_CENTRAL)); 

여기서 someconstantclass.java는 시간대 클래스에서 지원되는 다른 시간 구역 ID를 참조하는 상수를 보유하는 클래스입니다.

현대적인 방법은 Java.Time 수업입니다.

ZonedDateTime

입력 문자열과 일치하는 서식 패턴을 지정하십시오. 코드는 비슷합니다 SimpleDateFormat 그러나 정확히는 아닙니다. 클래스 문서를 읽으십시오 DateTimeFormatter. 우리는 a를 지정합니다 Locale 주일의 이름과 월 이름에 어떤 인간 언어를 사용할 것인지 결정합니다.

String input = "Wed Jul 08 17:08:48 GMT 2009";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "EEE MMM dd HH:mm:ss z uuuu" , Locale.ENGLISH );
ZonedDateTime zdt = ZonedDateTime.parse ( input , f );

ZDT.TOSTRING () : 2009-07-08T17 : 08 : 48Z [GMT

우리는 그것을 다른 시간대로 조정할 수 있습니다.

지정 a 적절한 시간대 이름 형식으로 continent/region. 3-4 문자 약어를 사용하지 마십시오 CDT 또는 EST 또는 IST 그들은 실제 시간대가 아니며 표준화되지 않았으며 독특하지도 않습니다 (!).

나는 그것을 추측 할 것이다 CDT 당신은 같은 시간대를 의미했습니다 America/Chicago.

ZoneId z = ZoneId.of( "America/Chicago" );
ZonedDateTime zdtChicago = zdt.withZoneSameInstant( z );

ZDTCHICAGO.TOSTRING () 2009-07-08T12 : 08 : 48-05 : 00 [America/Chicago

Instant

일반적으로 UTC에서 일하는 것이 가장 좋습니다. 그 추출물에 대해 Instant. 그만큼 Instant 클래스는 타임 라인의 순간을 나타냅니다 UTC 해상도와 함께 나노 초 (최대 9 개) 소수점 분수의 숫자).

이것 Instant 클래스는 Java.Time의 기본 빌딩 블록 클래스입니다. 당신은 생각할 수 있습니다 ZonedDateTime 로서 Instant 플러스 a ZoneId.

Instant instant = zdtChicago.toInstant();

instant.toString () : 2009-07-08T17 : 08 : 48Z


Java.Time에 대해

그만큼 Java.Time 프레임 워크는 Java 8 이상에 내장되어 있습니다. 이 수업은 번거로운 오래된 것을 대체합니다 유산 다음과 같은 날짜 시간 수업 java.util.Date, .Calendar, & java.text.SimpleDateFormat.

그만큼 조다-시간 지금 프로젝트 유지 관리 모드, Java.Time으로의 마이그레이션을 조언합니다.

자세한 내용은 오라클 튜토리얼. 많은 예와 설명에 대한 검색 스택 오버 플로우. 사양입니다 JSR 310.

Java.Time 수업을 어디에서 얻을 수 있습니까?

그만큼 Threeten-extra 프로젝트는 추가 클래스로 Java.Time을 연장합니다. 이 프로젝트는 Java.Time에 향후 추가 할 수있는 근거입니다. 여기에서 유용한 수업을 찾을 수 있습니다 Interval, YearWeek, YearQuarter, 그리고 .

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