Java에서 문자열을 날짜로 변환

1. 개요

이 튜토리얼에서는 String 객체를 Date 객체 변환하는 몇 가지 방법을 살펴 봅니다. 날짜 를 나타내는데도 사용되는 이전 java.util.Date 데이터 유형을 살펴보기 전에 Java 8에 도입 된 새로운 날짜 시간 API 인 java.time으로 시작하겠습니다 .

완료하려면 Joda-Time 및 Apache Commons Lang DateUtils 클래스를 사용하여 변환 할 외부 라이브러리도 살펴 보겠습니다 .

2. 문자열LocalDate 또는 LocalDateTime으로 변환

LocalDateLocalDateTime 은 날짜와 날짜 및 시간을 나타내는 변경 불가능한 날짜-시간 개체입니다. 기본적으로 Java 날짜는 ISO-8601 형식이므로이 형식으로 날짜와 시간을 나타내는 문자열이 있으면 이러한 클래스 parse () API를 직접 사용할 수 있습니다 .

이 새로운 API에 대한 자세한 내용은 다음과 같습니다.

2.1. 은 Using 구문 분석 API를

Date-Time API는 날짜 및 시간 정보가 포함 된 문자열 을 구문 분석하기위한 parse () 메서드를 제공 합니다. 문자열을 객체로 변환하려면 LOCALDATE 및 LocalDateTime 객체의 문자열이 유효한 날짜 또는 시간을 나타내야 ISO_LOCAL_DATE 또는 ISO_LOCAL_DATE_TIME에 따라.

그렇지 않으면 런타임에 DateTimeParseException 이 발생합니다.

첫 번째 예제에서 Stringjava.time으로 변환 해 보겠습니다 . LocalDate :

LocalDate date = LocalDate.parse("2018-05-05");

위와 비슷한 접근 방식을 사용하여 Stringjava.time 으로 변환 할 수 있습니다 . LocalDateTime :

LocalDateTime dateTime = LocalDateTime.parse("2018-05-05T11:50:55");

모두 것이 중요합니다 LOCALDATELocalDateTime 객체 시간대 불가지론이다. 그러나 시간 대별 날짜 및 시간을 처리해야하는 경우 ZonedDateTime 구문 분석 메서드를 직접 사용하여 시간 대별 날짜 시간을 가져올 수 있습니다.

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2015-05-05T10:15:30+01:00[Europe/Paris]");

이제 사용자 지정 형식으로 문자열을 변환하는 방법을 살펴 보겠습니다.

2.2. 사용자 지정 포맷터와 함께 Parse API 사용

사용자 정의 날짜 형식 의 문자열Date 객체 로 변환하는 것은 Java에서 널리 사용되는 작업입니다.

이를 위해 미리 정의 된 수많은 포맷터를 제공 하고 포맷터를 정의 할 수 있는 DateTimeFormatter 클래스를 사용합니다 .

DateTimeFormatter 의 미리 정의 된 포맷터 중 하나를 사용하는 예부터 시작하겠습니다 .

String dateInString = "19590709"; LocalDate date = LocalDate.parse(dateInString, DateTimeFormatter.BASIC_ISO_DATE);

다음 예에서는 "EEE, MMM d yyyy"형식을 적용하는 포맷터를 만들어 보겠습니다. 이 형식은주의 전체 요일 이름으로 3 자, 일을 나타내는 1 자리, 월을 나타내는 3 자, 연도를 나타내는 4 자리를 지정합니다.

이 포맷터는 " Fri, 3 Jan 2003"또는 "Wed, 23 Mar 1994 " 와 같은 문자열을 인식합니다 .

String dateInString = "Mon, 05 May 1980"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, d MMM yyyy", Locale.ENGLISH); LocalDate dateTime = LocalDate.parse(dateInString, formatter);

2.3. 일반적인 날짜 및 시간 패턴

몇 가지 일반적인 날짜 및 시간 패턴을 살펴 보겠습니다.

  • y – 연도 (1996, 96)
  • M – 월 (7 월, 7 월, 07)
  • d – 일 (1-31)
  • E – 요일 이름 (금요일, 일요일)
  • a 오전 / 오후 마커 (AM, PM)
  • H – 시간 (0-23)
  • h – 오전 / 오후 시간 (1-12)
  • m – 분 (0-60)
  • s – 초 단위 (0-60)

구문 분석을위한 패턴을 지정하는 데 사용할 수있는 전체 기호 목록을 보려면 여기를 클릭하십시오.

java.time 날짜를 이전 java.util.Date 객체 로 변환해야하는 경우 자세한 내용은이 기사를 참조하십시오.

3. 문자열java.util.Date로 변환

Java 8 이전에는 Java 날짜 및 시간 메커니즘이 때때로 여전히 작업해야하는 java.util.Date , java.util.Calendarjava.util.TimeZone 클래스 의 이전 API에 의해 제공되었습니다 .

String을 java.util.Date 객체 로 변환하는 방법을 살펴 보겠습니다 .

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH); String dateInString = "7-Jun-2013"; Date date = formatter.parse(dateInString);

위의 예에서 먼저 날짜 및 시간 형식을 설명하는 패턴을 전달하여 SimpleDateFormat 객체 를 생성해야 합니다.

다음으로, 날짜 String을 전달하는 parse () 메서드 를 호출해야합니다 . 전달 된 String 인수가 패턴과 동일한 형식이 아닌 경우 ParseException 이 발생합니다.

3.1. java.util.Date에 시간대 정보 추가

그것은주의하는 것이 중요 java.util.Date이 시간대의 개념이없는 , 단지 유닉스 시대 시간 경과 시간 (초) 대표 - 1970-01-01T00를 : 00 : 00Z.

그러나 Date 객체를 직접 인쇄하면 항상 Java 기본 시스템 시간대로 인쇄됩니다.

이 마지막 예에서는 시간대 정보를 추가하여 날짜 형식을 지정하는 방법을 살펴 보겠습니다.

SimpleDateFormat formatter = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a", Locale.ENGLISH); formatter.setTimeZone(TimeZone.getTimeZone("America/New_York")); String dateInString = "22-01-2015 10:15:55 AM"; Date date = formatter.parse(dateInString); String formattedDateString = formatter.format(date);

프로그래밍 방식으로 JVM 시간대를 변경할 수도 있지만 권장되지는 않습니다.

TimeZone.setDefault(TimeZone.getTimeZone("GMT"));

4. 외부 라이브러리

이제 핵심 Java에서 제공하는 신규 및 기존 API를 사용하여 String 객체를 Date 객체 로 변환하는 방법을 잘 이해 했으므로 몇 가지 외부 라이브러리를 살펴 보겠습니다.

4.1. Joda-Time 도서관

핵심 Java 날짜시간 라이브러리 의 대안 은 Joda-Time입니다. 작성자는 이제 사용자가 java.time (JSR-310) 으로 마이그레이션 할 수없는 경우 마이그레이션하도록 권장하지만 Joda-Time 라이브러리는 Date 및 Time 작업을위한 훌륭한 대안을 제공합니다 . 이 라이브러리는 Java 8 Date Time 프로젝트 에서 지원되는 거의 모든 기능을 제공합니다 .

아티팩트는 Maven Central에서 찾을 수 있습니다.

 joda-time joda-time 2.10 

다음은 표준 DateTime으로 작업하는 간단한 예제입니다 .

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); String dateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse(dateInString, formatter);

시간대를 명시 적으로 설정하는 예도 살펴 보겠습니다.

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); String dateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse(dateInString, formatter); DateTime dateTimeWithZone = dateTime.withZone(DateTimeZone.forID("Asia/Kolkata"));

4.2. Apache Commons Lang – DateUtils

DateUtils의 클래스는 많은 제공 레거시으로 쉽게 작동하도록 만드는 유용한 유틸리티 일정날짜 객체 .

commons-lang3 아티팩트는 Maven Central에서 사용할 수 있습니다.

 org.apache.commons commons-lang3 3.7 

날짜 패턴 배열 을 사용하여 날짜 문자열java.util.Date 로 변환 해 보겠습니다 .

String dateInString = "07/06-2013"; Date date = DateUtils.parseDate(dateInString, new String[] { "yyyy-MM-dd HH:mm:ss", "dd/MM-yyyy" });

5. 결론

이 기사에서 우리는 외부 라이브러리를 사용하는 것뿐만 아니라 일반 Java에서 시간이 있거나없는 다른 유형의 Date 객체 로 문자열을 변환하는 여러 방법을 설명했습니다 .

기사의 전체 소스 코드는 GitHub에서 확인할 수 있습니다.