프로그래밍 언어/JAVA

자바 문자열을 날짜로 변환하는 방법

Rateye 2021. 12. 3. 08:39
728x90
반응형
질문 : 자바 문자열을 날짜로 변환

'2010 년 1 월 2 일'형식 String 을 Java Date 로 변환하는 가장 좋은 방법은 무엇입니까?

궁극적으로 월, 일, 연도를 정수로 나누고 싶습니다.

Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();

날짜를 시간으로 변환합니다.

답변

그것은 어려운 방법이며, 이러한 java.util.Date setter 메서드는 Java 1.1 (1997) 이후로 더 이상 사용되지 않습니다.입력 문자열과 일치하는 형식 패턴을 사용 SimpleDateFormat 사용하여 날짜 형식을 지정하면됩니다 .

입력 문자열로 "2010 년 1 월 2 일"의 특정 경우 :

String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 GMT 2010

Locale 인수의 중요성에 유의하십시오. 생략하면 입력 문자열의 월 이름에 사용되는 것과 같이 반드시 영어가 아닌 기본 로케일을 사용합니다. 로케일이 입력 문자열과 일치하지 않으면 형식 패턴이 유효 해 보이지만 java.text.ParseException

다음은 사용 가능한 모든 형식 패턴을 나열하는 javadoc 에서 관련성을 추출한 것입니다.

패턴은 대소 문자를 구분하며 4 자 이상의 텍스트 기반 패턴은 전체 형식을 나타냅니다. 그렇지 않으면 사용 가능한 경우 짧거나 축약 된 양식이 사용됩니다. 따라서 예를 들어 MMMMM 이상은 필요하지 않습니다.

다음은 주어진 문자열을 현재까지 구문 분석하는 SimpleDateFormat 패턴의 몇 가지 예입니다.

중요한 점은 SimpleDateFormat 이 스레드로부터 안전 하지 않다는 것입니다. 즉, 정적 또는 인스턴스 변수로 선언하고 할당 한 다음 다른 메서드 / 스레드에서 재사용해서는 안됩니다. 항상 메서드 로컬 범위 내에서 완전히 새로 만들어야합니다.

Java 8 이상을 사용하는 경우 DateTimeFormatter 를 사용하십시오 (여기에서도 사전 정의 된 모든 포맷터 및 사용 가능한 형식 패턴을 보려면 링크를 클릭하십시오. 튜토리얼은 여기에서 볼 수 있음 ). 이 새로운 API는 JodaTime에서 영감을 받았습니다.

String string = "January 2, 2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date); // 2010-01-02

참고 : 형식 패턴에 시간 부분도 포함되는 경우 LocalDateTime#parse(text, formatter) 대신 LocalDate#parse(text, formatter) . 또한 형식 패턴에 시간대도 포함되는 경우 ZonedDateTime#parse(text, formatter) 대신 사용하십시오.

다음은 사용 가능한 모든 형식 패턴을 나열 하는 javadoc 에서 관련성을 추출한 것입니다.

더 많이 사용되는 패턴에 대해 미리 정의 된 여러 포맷터가 있습니다. 따라서 예를 들어 DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH); DateTimeFormatter.RFC_1123_DATE_TIME 사용할 수 있습니다. SimpleDateFormat 과 달리 스레드로부터 안전하기 때문에 가능합니다. 따라서 필요한 경우 직접 정의 할 수도 있습니다.

특정 입력 문자열 형식의 경우 명시적인 DateTimeFormatter 를 사용할 필요가 없습니다. 2016-09-26T17 : 44 : 57Z와 같은 표준 ISO 8601 날짜는 이미 사용하고 LocalDateTime#parse(text) ISO_LOCAL_DATE_TIME 포맷터. 마찬가지로 LocalDate#parse(text) 는 시간 구성 요소없이 ISO 날짜를 구문 분석하고 ( ISO_LOCAL_DATE 참조) ZonedDateTime#parse(text) 는 오프셋 및 시간대가 추가 된 ISO 날짜를 구문 분석합니다 ( ISO_ZONED_DATE_TIME 참조).

출처 : https://stackoverflow.com/questions/4216745/java-string-to-date-conversion
728x90
반응형