Converting a Date Using ThreadLocal

I have a requirement to convert the input date string format "20130212" (YYYYMMDD) to 12/02/2013 (DD / MM / YYYY)

using ThreadLocal . I know a way to do this without ThreadLocal . Can anybody help me?

Conversion without ThreadLocal :

  final SimpleDateFormat format2 = new SimpleDateFormat("MM/dd/yyyy"); final SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMdd"); final Date date = format1.parse(tradeDate); final Date formattedDate = format2.parse(format2.format(date)); 
+7
java date-conversion simpledateformat
source share
2 answers

ThreadLocal in Java is a way to ensure thread safety, in addition to writing immutable classes. Since SimpleDateFormat is not thread safe, you can use ThreadLocal to make it thread safe.

 class DateFormatter{ private static ThreadLocal<SimpleDateFormat> outDateFormatHolder = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("MM/dd/yyyy"); } }; private static ThreadLocal<SimpleDateFormat> inDateFormatHolder = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyyMMdd"); } }; public static String formatDate(String date) throws ParseException { return outDateFormatHolder.get().format( inDateFormatHolder.get().parse(date)); } } 
+9
source share

The idea behind this is that SimpleDateFormat is not thread safe, so in a mutil-threaded application you cannot share an instance of SimpleDateFormat between multiple threads. But since creating a SimpleDateFormat is an expensive operation, we can use ThreadLocal as a workaround

 static ThreadLocal<SimpleDateFormat> format1 = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd"); } }; public String formatDate(Date date) { return format1.get().format(date); } 
+10
source share

All Articles