ㅤㅤㅤ

SimpleDateFormat 기본 자료 본문

プログラミング/JAVA

SimpleDateFormat 기본 자료

ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ 2017. 6. 7. 14:29

String -> Date 타입

DateFormat sdFormat = new SimpleDateFormat("yyyyMMdd");
Date tempDate = sdFormat.parse("20100222");

주의할 점..
" " 내부에 들어가는 내용대로 String 데이터가 입력되어 있어야 파싱이 된다.


Date -> String 타입

DateFormat sdFormat = new SimpleDateFormat("yyyyMMdd");
Date nowDate = new Date();
String tempDate sdFormat.format(nowDate);

출처: http://sdw8001.tistory.com/130 [훈트이야기]





SimpleDateFormat format = new java.text.SimpleDateFormat("yyyyMMdd"); 

String today = format.format(new Date()); 

today -> 20151015 가 출력 된다. 

yyyy : 년 
MM ; 월 
dd ; 일 
HH : 시 
mm : 분 
ss : 초

출처: http://3210559.tistory.com/16 [잡학다식]





String dateConvertBefore = "yyyy/MM/dd";


Date date = new SimpleDateFormat("yyyy/MM/dd").parse(dateConvertBefore);


convertCsv[0] = new SimpleDateFormat("yyyy-MM-dd").format(date);






날짜 표현하는데는 DateFormat이 있다. 하지만 내가 원하는 패턴으로 보여주지 않는다. 이 클래스를 사용하면 "2009년 5월 29일 금요일" 또는 "2009. 5. 29", "09. 5. 29"와 같이 보여준다. 내가 원하는 표시형태는 "20090529"인데..

Date now = new Date();

DateFormat format1 = DateFormat.getDateInstance(DateFormat.FULL);
System.out.println(format1.format(now));
DateFormat format2 = DateFormat.getDateInstance(DateFormat.LONG);
System.out.println(format2.format(now));
DateFormat format3 = DateFormat.getDateInstance(DateFormat.MEDIUM);
System.out.println(format3.format(now));
DateFormat format4 = DateFormat.getDateInstance(DateFormat.SHORT);
System.out.println(format4.format(now));

결과는 아래처럼..

2009년 5월 29일 금요일
2009년 5월 29일 (금)
2009. 5. 29
09. 5. 29



자.. 그럼 내가 원하는 날짜표현을 쓸 수 있는 방법을 찾아보자. 다으밍(Google은 Googling이니깐 Daum은 Dauming인겨?? =ㅅ=a)을 했다. 워낙 많이 찾는 내용이라 잘 나온다. ㅋㅋ

패턴을 사용하는 방법 중 간단한 방법은 을 사용하는 방법이다. SimpleDateFormat은 DateFormat을 상속받아 사용하기 편하게 이쁘게 되어 있다. 이 클래스를 사용하면 우리가 자주 사용하는 "yyyyMMdd"와 같은 표현을 사용할 수 있다.

Date now = new Date();

SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
System.out.println(format.format(now)); // 20090529
format = new SimpleDateFormat("E MMM dd HH:mm:ss", Locale.UK);
System.out.println(format.format(now)); // Fri May 29 11:06:29


패턴 사용법은 누구나 아니까 패스~~하고, 패턴 구문만 살짝.. 튜토리얼에서도 사용법을 알 수 있다.
LetterDate or Time ComponentPresentationExamples
GEra designatorTextAD
yYearYear199696
MMonth in yearMonthJulyJul07
wWeek in yearNumber27
WWeek in monthNumber2
DDay in yearNumber189
dDay in monthNumber10
FDay of week in monthNumber2
EDay in weekTextTuesdayTue
aAm/pm markerTextPM
HHour in day (0-23)Number0
kHour in day (1-24)Number24
KHour in am/pm (0-11)Number0
hHour in am/pm (1-12)Number12
mMinute in hourNumber30
sSecond in minuteNumber55
SMillisecondNumber978
zTime zoneGeneral time zonePacific Standard TimePSTGMT-08:00
ZTime zoneRFC 822 time zone-0800

그리고 아래의 간단한 예제는 API문서에서..
Date and Time PatternResult
"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








SimpleDateFormat 클래스와 위험성



JAVA 1.5에서는 Formatter 클래스를 지원하면서, 다양한 확장된 Format 클래스들이 나왔다.

이중에서 가장 많이 Formatting이 필요한게 날짜 관련인데, 이는 앞에 Formatter 클래스에서 설명을 했다.


[JAVA] Formatter 클래스 format(), 날짜 format()


하지만 SimpleDateFormat 클래스라는 좀 더 쉽게 날짜 Formatting이 가능한 클래스가 있다.


SimpleDateFormat format = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");


또한 format의 대상으로 Date() 클래스와 Calendar 클래스를 모두 사용할 수 있다.


 

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class FormatterTest {

    public static void main(String[] args) {
            
        SimpleDateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
        
        Date date = new Date();
        String today = df.format(date);
        System.out.println(today);
        
        Calendar c = Calendar.getInstance();
        String today2 = df.format(c.getTime());
        System.out.println(today2);

    }

}



- SimpleDateFormat 으로 날짜 데이터 포맷 형식을 "yyyy년 MM월 dd일 hh시 mm분 ss초"  로 지정하였다.

- Date() 클래스와 Calendar 클래스를 SimpleDateFormat 에 format()으로 포매팅 하면 현재 날짜 시간으로 지정한 포맷으로 데이터를 변환한다.


* 날짜 symbol


ex> 현재 일자 : 2014년 01월 01일 13시 20분 10초


Symbol 

설명 

 사용 예

 y

 year : 년도 

 yy : 14 , yyyy : 2014

 M

 month in year : 월 

 M : 1, MM : 01, MMM : 1월 

 d

 day in month : 일

 d : 1, dd : 01, ddd : 001, dddd : 0001

 h

 hour in am/pm(1-12) : 시

 h : 1  , hh : 01, hhh : 001, hhhh : 0001

 a

 am/pm marker

 a : 오후

(AM/PM 으로 표시하려면 format에서 Locale.US를 지정)

 k

 hour in day (1-24) : 시

 k : 13, kk : 13, kkk : 013, kkkk : 0013

 m

 minute in hour : 분 

 m : 20, mm: 20, mmm : 020, mmmm : 0020

 s

 second in minute : 초

 s : 10, ss : 10, sss : 010. ssss: 0010

 w

 week in year : 주(년기준) 

 w : 1, ww : 01, www :001, wwww : 0001 

 D 

 day in year : 일(년기준)

 D : 1, DD : 01, DDD: 001, DDDD : 0001 

 E

 day of week : 요일

 E : 수

 F

 day of week in month

: 월 기준 주간 요일 순번 

 F : 1, FF : 01, FFF:001, FFFF:0001

 G

 era designator : 시대

 AD 

 H

 hour in day (0-23) : 시 

 H: 13, HH : 13, HHH : 013 , HHHH:0013

 K

 hour in am/pm(0-11) : 시 

 K: 1 , KK : 01, KKK :001, KKKK: 0001 

 S

 fractional seconds : 초

 S : 402 

 W

 week in month : 주 (월기준) 

 W : 1, WW : 01, WWW : 001, WWWW : 0001

 z

 time zone

 z : KST, zzzz: 한국표준시

 Z

 time zone (RFC 822)  Z : +0900


위의 날짜 Symbol을 사용하여 원하는 날짜 형식으로 출력할 수 있다.


* SimpleDateFormat 클래스의 위험성


멀티 쓰레드의 부하가 많이 걸리는 부분에서 SimpleDateFormat을 사용하면 java.lang.ArrayIndexOutOfBoundsException 에러가 종종 발생한다.

SimpleDateFormat은 Thread-safe 하지 못하기 때문에 발생하는 문제이다.

따라서 멀티 쓰레드를 사용하는 부하가 많은 시스템에서는 SimpleDateFormat을 사용할 때 주의해야 한다.


이를 보완해서 Joda-Time 이라는 라이브러리 또는 apache의 common에 FastDateTime 이라는 라이브러리가 있다고 한다.

이 라이브러리들은 Thread-Safe 하며 속도도 빠르다고 하니, SimpleDateTime 보다는 이것들을 사용하는 것이 좋다.


이 대체 라이브러리들에 대해서는 SimpleDateTime 과 비교하여 추후에 테스트 해봐야 겠다.



출처: http://hyeonstorage.tistory.com/232 [개발이 하고 싶어요]


Comments