Java SimpleDateFormat - Java 날짜 형식
소개
Java SimpleDateFormat
및 DateFormat
클래스는 날짜 형식 지정에 사용됩니다. 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();
DateFormat
의 getDateInstance
메서드에는 두 개의 입력 매개변수가 필요합니다. 첫 번째 매개변수는 사용할 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
) 지역의 날짜 형식을 지정합니다.
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
이 서식 지정(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
이 패턴은 "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
”를 출력합니다.
Output13: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
)가 출력됩니다.
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
날짜를 지정하지 않았기 때문에 프로그램은 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
) 지역의 현재 시간 형식을 지정합니다.
Outputmardi janvier 2018 14:51:02.354+0530
일과 월은 입력으로 제공된 로케일
에 따라 프랑스어로 이름이 지정됩니다. mardi
는 "Tuesday\이고 janvier
는 "January\입니다. .
결론
이 기사에서는 Java의 SimpleDateFormat
및 DateFormat
에 대해 배웠습니다.
참조:
- SimpleDateFormat API 문서
- DateFormat API 문서