programing

Java에서 문자열을 캘린더 개체로 변환

javaba 2022. 8. 13. 16:44
반응형

Java에서 문자열을 캘린더 개체로 변환

저는 Java에 익숙하지 않습니다.보통 PHP로 작업합니다.

이 문자열을 변환하려고 합니다.

2011년 3월 14일 (월) 16:02:37 GMT

다음과 같이 년과 달을 쉽게 가져올 수 있도록 달력 개체로:

String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);

수동으로 해석하는 것이 좋지 않을까요?서브스트링 방식 사용?

어떤 조언이라도 고마워!

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done

: "set ": "Locale


참고 항목

dr;dr

최신 접근법에서는 java.time 클래스를 사용합니다.

YearMonth.from(
    ZonedDateTime.parse( 
        "Mon Mar 14 16:02:37 GMT 2011" , 
        DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )
     )
).toString()

2011-03

레거시 날짜/시간 클래스 사용 안 함

현대적인 방법은 java.time 클래스를 사용하는 것입니다.다음과 같은 이전 날짜 시간 클래스Calendar설계가 서툴고 혼란스러우며 번거롭다는 것이 증명되었습니다.

문자열 입력과 일치하는 커스텀포메터를 정의합니다.

String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );

「 」로서 ZonedDateTime.

ZonedDateTime zdt = ZonedDateTime.parse( input , f );

을 사용법java에는 java.time이 포함됩니다.YearMonth수업할 수 있습니다.

YearMonth ym = YearMonth.from( zdt );

필요한 경우 년도와 월 번호를 조회할 수 있습니다.

int year = ym.getYear();
int month = ym.getMonthValue();

그...toStringmethod는 표준 ISO 8601 형식의 문자열을 생성합니다.

String output = ym.toString();

이걸 다 합치세요.

String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
YearMonth ym = YearMonth.from( zdt );
int year = ym.getYear();
int month = ym.getMonthValue();

콘솔에 덤프합니다.

System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );

입력: 2011년 3월 14일 (월) 16:02:37 GMT

zdt: 2011-03-14T16:02:37Z[GMT]

ym: 2011-03

라이브 코드

IdeOne.com 에서 실행되고 있는 이 코드를 참조해 주세요.

변환

필요한 경우Calendar오브젝트에서는 오래된 클래스에 추가된 새로운 메서드를 사용하여로 변환할 수 있습니다.

GregorianCalendar gc = GregorianCalendar.from( zdt );

java.time 정보

java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.

자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.

현재 유지보수 모드에 있는 조다 타임 프로젝트는 java.time 클래스로의 이행을 권장합니다.

java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*반.휴지 상태 5 및 JPA 2.2는 java.time을 지원합니다.

java.time 클래스는 어디서 얻을 수 있습니까?

와 같은 수업에서 이미 존재하는 코드를 복제하는 것은 좋지 않다고 생각합니다.

다른 한편으로, 저는 개인적으로 피하기를 권합니다.Calendar그리고.DateJoda Time을 훨씬 더 잘 설계된 날짜와 시간 API로 사용할 수 있습니다.예를 들어 다음과 같은 점에 유의해야 합니다.SimpleDateFormat는 스레드 세이프가 아니기 때문에 사용할 때마다 스레드 스위칭, 동기화 또는 새로운 인스턴스가 필요합니다.Joda 파서와 포맷터는 스레드 세이프입니다.

새 달력을 만들 필요가 없습니다. SimpleDateFormat은 이미 아래에 달력을 사용하고 있습니다.

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.EN_US);
Date date = sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done
Calendar cal = sdf.getCalendar();

(아직은 코멘트를 할 수 없기 때문에 새로운 답변을 작성했습니다.)

SimpleDateFormat좋아요, 주의하세요.HH와는 다르다hh작업 시간을 단축할 수 있습니다. HH는 24시간 기준으로 반환되고 hh는 12시간 기준으로 반환됩니다.

예를 들어, 다음 명령어는 12시간의 시간을 반환합니다.

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");

24시간이 반환됩니다.

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");

시간대를 사용하여 시간을 해석합니다.Z패턴은 시간대를 위한 것입니다.

String aTime = "2017-10-25T11:39:00+09:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault());
try {
    Calendar cal = Calendar.getInstance();
    cal.setTime(sdf.parse(aTime));
    Log.i(TAG, "time = " + cal.getTimeInMillis()); 
} catch (ParseException e) {
    e.printStackTrace();
}

출력: UTC 시간을 반환합니다.

1508899140000

여기에 이미지 설명 입력

시간대를 다음과 같은 패턴으로 설정하지 않으면yyyy-MM-dd'T'HH:mm:ss.SimpleDateFormat에 설정된 타임존을 사용합니다.Setting

네, 직접 해석하는 것은 좋지 않은 관행입니다.SimpleDateFormat을 보면 문자열이 날짜로 바뀌고 날짜를 캘린더 인스턴스로 설정할 수 있습니다.

간단한 방법:

public Calendar stringToCalendar(String date, String pattern) throws ParseException {
    String DEFAULT_LOCALE_NAME = "pt";
    String DEFAULT_COUNTRY = "BR";
    Locale DEFAULT_LOCALE = new Locale(DEFAULT_LOCALE_NAME, DEFAULT_COUNTRY);
    SimpleDateFormat format = new SimpleDateFormat(pattern, LocaleUtils.DEFAULT_LOCALE);
    Date d = format.parse(date);
    Calendar c = getCalendar();
    c.setTime(d);
    return c;
}

언급URL : https://stackoverflow.com/questions/5301226/convert-string-to-calendar-object-in-java

반응형