Java SimpleDateFormat - Java 날짜 형식


소개

Java SimpleDateFormatDateFormat 클래스는 날짜 형식 지정에 사용됩니다. Java의 날짜 및 시간 기능을 표시하거나 활용해야 하는 경우에 주로 사용됩니다. 이 두 클래스는 모두 com.text 패키지에 있습니다.

자바 날짜 형식

  • DateFormat은 입력으로 제공된 특정 로케일을 기반으로 날짜를 String 형식으로 지정하는 데 사용됩니다.
  • 로케일은 코드를 사용자에게 더 많은 로케일로 만들기 위해 지역 및 언어를 지정하는 데 사용됩니다.
  • 날짜를 쓰는 방식은 지역마다 다릅니다. 예를 들어 2017년 12월 31일은 인도에서 31-12-2017로 작성되지만 미국에서는 12-로 동일하게 작성됩니다. 2017년 31월.
  • DateFormat 클래스는 동기화되지 않으므로 각 스레드에 대해 별도의 인스턴스를 생성하는 것이 좋습니다.

DateFormat 객체는 DateFormat 클래스의 getDateInstance()getTimeInstance() 메서드를 사용하여 만들 수 있습니다.

Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);

참고: 생성자 Locale(String, String)은 버전 19부터 사용되지 않습니다.

Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();

DateFormatgetDateInstance 메서드에는 두 개의 입력 매개변수가 필요합니다. 첫 번째 매개변수는 사용할 DateFormat을 지정하고 두 번째 매개변수는 로케일입니다.

형식 사용

DateFormat 클래스에는 서식 지정을 담당하는 format 메서드가 있습니다.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

이 코드는 프랑스어(fr) 언어 및 프랑스(FR) 지역의 날짜 형식을 지정합니다.

Output
3 janv. 2018

getTimeInstance() 사용

DateFormat 인스턴스를 생성하기 위해 getDateInstance() 메서드를 사용하고 있습니다.

시간 형식을 수행하려면 시간 인스턴스가 필요합니다. 시간 인스턴스를 가져오기 위해 getTimeInstance() 메서드를 사용할 것입니다.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

이 코드는 프랑스어(fr) 언어 및 프랑스(FR) 지역의 시간 형식을 지정합니다.

Output
11:03:01

자바 SimpleDateFormat

SimpleDateFormatDateFormat과 유사합니다. 그들 사이의 유일한 주요 차이점은 SimpleDateFormat이 서식 지정(Date에서 String 변환) 및 구문 분석(String에서 Date로 변환) 로케일 지원이 있는 반면 DateFormat에는 로케일 지원이 없습니다. DateFormat은 날짜 형식 지정 및 구문 분석에 대한 기본 지원을 제공하는 추상 클래스입니다. SimpleDateFormatDateFormat 클래스를 확장하는 구체적인 클래스입니다.

SimpleDateFormatSimpleDateFormat 생성자를 사용하여 만들 수 있습니다. 생성자는 매개변수화된 생성자이며 문자열 패턴을 매개변수로 필요로 합니다.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

문자열 pattern은 날짜 형식을 지정하는 데 사용되는 패턴이며 출력은 해당 패턴에서 "MM-dd-yyyy”로 생성됩니다.

패턴

서식 패턴에 사용해야 하는 패턴 구문을 살펴보겠습니다.

Letter for Pattern Date or Time component Examples
G Era designator AD
y Year 2018 (yyyy), 18 (yy)
M Month in year July (MMMM), Jul (MMM), 07 (MM)
w Results in week in year 16
W Results in week in month 3
D Gives the day count in the year 266
d Day of the month 09 (dd), 9(d)
F Day of the week in month 4
E Day name in the week Tuesday, Tue
u Day number of week where 1 represents Monday, 2 represents Tuesday and so on 2
a AM or PM marker AM
H Hour in the day (0-23) 12
k Hour in the day (1-24) 23
K Hour in am/pm for 12 hour format (0-11) 0
h Hour in am/pm for 12 hour format (1-12) 12
m Minute in the hour 59
s Second in the minute 35
S Millisecond in the minute 978
z Timezone Pacific Standard Time; PST; GMT-08:00
Z Timezone offset in hours (RFC pattern) -0800
X Timezone offset in ISO format -08; -0800; -08:00

월과 같이 다른 결과에 대해 일부 문자를 다른 양으로 사용해야 합니다.

Type Pattern Example Output
Full Month MMMM July
Abbreviated Month MMM Jul
Numeric Month MM 07

이제 다양한 형식의 날짜 및 시간에 대한 몇 가지 예를 살펴보겠습니다.

Pattern Result
MM/dd/yyyy 01/02/2018
dd-M-yyyy hh:mm:ss 02-1-2018 06:07:59
dd MMMM yyyy 02 January 2018
dd MMMM yyyy zzzz 02 January 2018 India Standard Time
E, dd MMM yyyy HH:mm:ss z Tue, 02 Jan 2018 18:07:59 IST

SimpleDateFormat() 사용

날짜를 구문 분석하려면 생성자를 사용하여 SimpleDateFormat 인스턴스를 생성한 다음 format() 메서드를 사용해야 합니다.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

이 코드는 "MM-dd-yyyy”를 출력합니다.

Output
01-02-2018

이 패턴은 "month in year\, "day in month\ 및 "year\를 생성합니다. 문자 유형(및 대문자 사용)과 문자 수는 문자열에 기여합니다. 월은 두 자리 숫자로 표시됩니다. 날짜는 2자리, 연도는 4자리입니다.

이 코드는 "2018년 1월 2일\의 날짜를 "01-02-2018\로 표시했습니다.

파싱 시간을 위해 SimpleDateFormat 인스턴스를 생성하면서 패턴을 변경해야 합니다.

String pattern = "HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

이 코드는 "HH:mm:ss.SSSZ”를 출력합니다.

Output
13:03:15.454+0530

이 패턴은 "시간\, "분\, "초\, "밀리초\ 및 "시간대 오프셋(RFC 패턴)\을 생성합니다.

이 코드는 시간을 "13:03:15.454+0530”로 표시했습니다.

구문 분석() 사용

구문 분석은 String을 java.util.Date 인스턴스로 변환하는 것입니다. SimpleDateFormat 클래스의 parse() 메서드를 사용하여 문자열을 날짜 인스턴스로 구문 분석할 수 있습니다. 문자열을 날짜로 구문 분석하려면 SimpleDateFormat 클래스의 인스턴스와 클래스 생성자에 대한 입력으로 문자열 패턴이 필요합니다.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);

그러면 지정된 시간 없이 날짜(12-01-2018)가 출력됩니다.

Output
Sat Dec 01 00:00:00 IST 2018

이제 시간을 파싱하는 SimpleDateFormat 예제를 살펴보겠습니다.

String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);

이렇게 하면 지정된 날짜 없이 시간(22:00:03)이 출력됩니다.

Output
Thu Jan 01 22:00:03 IST 1970

날짜를 지정하지 않았기 때문에 프로그램은 epoch를 날짜로 간주했습니다(예: 1970년 1월 1일).

로케일 사용

우리는 DateFormat의 일부로 로케일을 사용했으며 지역에 따라 로케일이 사용되는 것을 확인했습니다.

String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("fr", "FR"));
Date date = simpleDateFormat.format(new Date());
System.out.println(date);

이 코드는 프랑스어(fr) 언어 및 프랑스(FR) 지역의 현재 시간 형식을 지정합니다.

Output
mardi janvier 2018 14:51:02.354+0530

일과 월은 입력으로 제공된 로케일에 따라 프랑스어로 이름이 지정됩니다. mardi는 "Tuesday\이고 janvier는 "January\입니다. .

결론

이 기사에서는 Java의 SimpleDateFormatDateFormat에 대해 배웠습니다.

참조:

  • SimpleDateFormat API 문서
  • DateFormat API 문서