9

受信日付文字列形式 "20130212" (YYYYMMDD) を 12/02/2013 (DD/MM/YYYY) に変換する必要があります。

を使用してThreadLocal。なしでこれを行う方法を知っていThreadLocalます。誰でも私を助けることができますか?

なしの変換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));
4

2 に答える 2

11

Java の ThreadLocal は、不変クラスを作成することとは別に、スレッドセーフを実現する方法です。SimpleDateFormat はスレッド セーフではないため、ThreadLocal を使用してスレッド セーフにすることができます。

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));
}        
}
于 2013-09-03T10:59:43.270 に答える