보통 java에서 Date를 String으로 바꾼다거나 String을 Date로 바꿀때 많이 사용하는 것이 SimpleDateFormat 인데요.
요녀석은 Thread-Safe 하지 못한 문제 때문에 try {} catch{}로 묶어서 사용하거나 아니면 대충 쓰곤 했죠.. -_-;
하지만 시대가 발전하여 apache의 commons에 FastDateFormat이 나왔으니.. 두둥.
이녀석은 Thread-Safe 할 뿐더러 속도까지 빠르지.. SimpleDateFormat 에서 FastDateFormat로 안바꿀 이유가 없겠죠?
코드를 한번 보죠.
@Test
public void 날짜_확인() throws ParseException
{
Date yesterDate =org.apache.commons.lang.time.DateUtils.addDays( new Date(), -2);
yesterDate= org.apache.commons.lang.time.DateUtils.addSeconds(yesterDate, -1);
Format sdf = FastDateFormat.getInstance( "yyyyMMdd", Locale.getDefault());
String yesterDay = sdf.format( yesterDate);
System.out.println( "FastDateFormat : " + yesterDay);
yesterDay = new SimpleDateFormat( "yyyyMMdd").format( yesterDate);
System.out.println( "SimpleDateFormat : " + yesterDay);
}
이렇게 두개의 값을 찍어보면
FastDateFormat : 20130825
SimpleDateFormat : 20130825
결과값은 동일합니다.
속도는 어떻까요?
@Test
public void 날짜_속도_Test()
{
Date yesterDate =org.apache.commons.lang.time.DateUtils.addDays( new Date(), -2);
Stopwatch watch = new Stopwatch();
watch.start();
int nMax = 1000000;
String yesterDay = "";
for ( int i=0; i < nMax; i++)
{
yesterDay =FastDateFormat.getInstance( "yyyyMMdd", Locale.getDefault()).format( yesterDate);
}
watch.stop();
System.out.format("FastDateFormat : %d회 걸린 시간 MICROSECONDS : %d%n", nMax, watch.elapsed( TimeUnit.MICROSECONDS));
watch = new Stopwatch();
watch.start();
for ( int i=0; i < nMax; i++)
{
yesterDay = new SimpleDateFormat( "yyyyMMdd").format( yesterDate);
}
watch.stop();
System.out.format("SimpleDateFormat : %d회 걸린 시간 MICROSECONDS : %d%n", nMax, watch.elapsed( TimeUnit.MICROSECONDS));
}
FastDateFormat : 1000000회 걸린 시간 MICROSECONDS : 1409846
SimpleDateFormat : 1000000회 걸린 시간 MICROSECONDS : 4434221
대략 2배이상 차이가 나네요? @.@
근데 FastDateFormat은 parse() 메소드를 지원하지 않더군요.
즉 String을 Date로 해주는 것은 지원이 안됩니다. 이것까지 해주면 참 좋은데..
구글링을 해보니 JodaTime을 이용하면 된다고 하네요.
그래도.. 속도도 빠르고 Thread-safe까지 하니 안바꿀 이유가 없겠습니다. ^^;