본문 바로가기
STUDY_NOTE/java

java 날짜 포맷

by kh201 2021. 3. 11.

nowonbun.tistory.com/502

 

[Java] 날짜 포맷 설정(SimpleDateFormat)

안녕하세요. 명월입니다. 이 글은 java에서 날짜 포맷에 대한 글입니다. 사실 java에서 날짜 포맷을 사용하는 건 크게 어려운 일은 아닙니다. 단지, 저도 마찬가지지만 막상 사용하려고 하면 기억

nowonbun.tistory.com

먼저 Date형식에서 String으로 변환, 혹은 String에서 Date형식으로 변환하는 건 SimpleDateFormat 클래스입니다. SimpleDateFormat 에서 포맷을 결정하는데 그 식은 아래와 같습니다.

링크 - https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

문자일시 및 시간 컴포넨트표시예제

G Era designator Text AD
y Year Year 1996; 96
Y Week year Year 2009; 09
M Month in year (context sensitive) Month July; Jul; 07
L Month in year (standalone form) Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day name in week Text Tuesday; Tue
u Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00

예제 패턴입니다.

날짜 및 시간 패턴결과

"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX" 2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u" 2001-W27-3

참고로 Date 클래스를 가져오는 방식은 두가지 방식이 있습니다. Calendar.getInstance().getTime()와 new Date방식입니다.

일단 권장하는 방법은 Calendar를 통해 Date방식을 가져오는 걸 추천합니다.

 

이유인 즉, 시간이란 객체는 사실 생성한다는 건 어찌보면 맞는 것이고 틀린 이야기입니다. System에 흘러가는 시간은 고정으로 정해져 있고 local system에서 가져오는 값인데 그 객체를 new로 선언한다는 건 어쩌면 메모리 낭비일 수도 있다는 개념이기 때문일 것입니다.

그러나 흘러가는 시간에서 특정시간 객체를 생성해서 가져오는 생각으로 하면 new도 틀린 이야기 같지는 않습니다만 어쨋든 시간을 생성한다는 것은 많은 리소스가 사용되고 그로 인해 많은 버그의 가능성이 있다고 이야기합니다.

 

간단하게 이야기하면 new Date는 특정 시간의 날짜를 대입하여 계산하고, Calendar의 경우는 1900년 1월 1일의 기준으로 오늘 날짜의 차이로 날짜를 계산한다는 차이가 있다고 합니다.

참조 - https://stackoverflow.com/questions/368094/system-currenttimemillis-vs-new-date-vs-calendar-getinstance-gettime

참조 - https://stackoverflow.com/questions/20693131/difference-between-new-date-and-calendar-date/20693309

 

뭐 엄청 복잡합니다. 정확하게 알면 좋겠지만, 그냥 Calendar.getInstance를 사용하라고 하니 사용하는 유저는 그냥 API를 따라서 사용하는 것이 버그를 줄이는 길이곘습니다.



출처: https://nowonbun.tistory.com/502 [명월 일지]

'STUDY_NOTE > java' 카테고리의 다른 글

java 특정 날짜 사이의 날짜 생성하기  (0) 2021.04.09
자바 문자열 비교 함수 compare(), compareTo()  (0) 2021.04.09
HttpURLConnection 사용시 참고  (0) 2021.03.12
java util  (0) 2021.03.11
java.util.Date.getTime()  (0) 2021.03.11