소개
Java의 SimpleDateFormat
및 DateFormat
클래스는 날짜 형식 지정에 사용됩니다. Java의 날짜 및 시간 기능을 표시하거나 활용해야 하는 경우에 주로 사용됩니다. 이 두 클래스는 com.text
패키지에 있습니다.
Java의 DateFormat
DateFormat
는 특정 로케일을 기반으로 날짜를String
으로 형식화하는 데 사용됩니다.- 로케일은 사용자에게 더 맞추어진 코드를 만들기 위해 지역 및 언어를 지정하는 데 사용됩니다.
- 세계의 다른 지역에서 날짜를 쓰는 방법이 다릅니다. 예를 들어, 인도에서는
31st Dec 2017
를31-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();
DateFormat
의 getDateInstance
메서드는 두 개의 입력 매개변수가 필요합니다. 첫 번째 매개변수는 사용할 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
) 지역의 날짜를 형식화합니다:
Output3 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
) 지역의 시간을 형식화합니다:
Output11:03:01
자바 SimpleDateFormat
SimpleDateFormat
은 DateFormat
과 유사합니다. 그들 사이의 주요 차이점은 SimpleDateFormat
이 지역 설정(locale support)을 사용하여 형식화(Date
를 String
으로 변환) 및 구문 분석(String
을 Date
로 변환)에 사용될 수 있다는 것이며, 반면에 DateFormat
은 지역 설정을 지원하지 않습니다. DateFormat
은 날짜 형식화 및 구문 분석을 위한 기본 지원을 제공하는 추상 클래스입니다. SimpleDateFormat
은 DateFormat
클래스를 확장한 구체적인 클래스입니다.
SimpleDateFormat
은 SimpleDateFormat
생성자를 사용하여 만들 수 있습니다. 생성자는 매개변수가 있는 생성자이며 문자열 패턴이 필요합니다.
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”를 출력합니다:
Output01-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”를 출력합니다:
Output13: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
)가 출력됩니다:
OutputSat 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
)이 출력됩니다:
OutputThu Jan 01 22:00:03 IST 1970
날짜를 지정하지 않았기 때문에 프로그램은 에포크를 날짜로 고려했습니다(즉, 01-Jan-1970
).
Locale
사용
Locale
을 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
) 지역으로 형식화합니다:
Outputmardi janvier 2018 14:51:02.354+0530
날짜 및 월은 입력으로 제공된 Locale
을 기반으로 프랑스어로 명명됩니다 – mardi
는 “Tuesday”이고 janvier
는 “January”입니다.
결론
이 문서에서는 Java의 SimpleDateFormat
및 DateFormat
에 대해 배웠습니다.
참고:
Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format