Java SimpleDateFormat – Java 날짜 형식

소개

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

Java의 DateFormat

  • DateFormat는 특정 로케일을 기반으로 날짜를 String으로 형식화하는 데 사용됩니다.
  • 로케일은 사용자에게 더 맞추어진 코드를 만들기 위해 지역 및 언어를 지정하는 데 사용됩니다.
  • 세계의 다른 지역에서 날짜를 쓰는 방법이 다릅니다. 예를 들어, 인도에서는 31st Dec 201731-12-2017로 쓰지만, 미국에서는 동일한 것을 12-31-2017로 쓸 것입니다.
  • DateFormat 클래스는 동기화되지 않으므로, 각 스레드마다 별도의 인스턴스를 생성하는 것이 좋습니다.

A DateFormat object can be created using the getDateInstance() and getTimeInstance() method of the DateFormat class.

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

참고: 버전 19부터 생성자 Locale(String, String)는 사용이 중단되었습니다.

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

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

format을 사용

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이 지역 설정(locale support)을 사용하여 형식화(DateString으로 변환) 및 구문 분석(StringDate로 변환)에 사용될 수 있다는 것이며, 반면에 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

이 패턴은 “연중 월”, “월별 일”, “연도”를 생성합니다. 문자의 유형(및 대소문자)과 문자 수가 문자열에 기여합니다. 월은 두 자리 숫자로, 일은 두 자리 숫자로, 연도는 네 자리 숫자로 표시됩니다.

이 코드는 “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

이 패턴은 “시간”, “분”, “초”, “밀리초”, “시간대 오프셋(UTC 패턴)”를 생성합니다.

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

parse() 사용하기

Parsing은 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

날짜를 지정하지 않았기 때문에 프로그램은 에포크를 날짜로 고려했습니다(즉, 01-Jan-1970).

Locale 사용

LocaleDateFormat의 일부로 사용했으며 로케일은 지역을 기반으로 사용됨을 확인했습니다.

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

날짜 및 월은 입력으로 제공된 Locale을 기반으로 프랑스어로 명명됩니다 – mardi는 “Tuesday”이고 janvier는 “January”입니다.

결론

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

참고:

Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format