Потокобезопасный анализатор даты - PullRequest
10 голосов
/ 11 января 2011

Я ищу поточно-безопасную замену для SimpleDateFormat.parseObject на старом добром FastDateFormat не реализовано и просто выдает ошибку.Есть идеи?Мне не нужно ничего особенного, просто безопасность потоков и возможность обрабатывать этот шаблон: "yyyy-MM-dd".

Ответы [ 4 ]

13 голосов
/ 11 января 2011

Если это вообще возможно, используйте Joda Time .Его парсеры даты / времени являются поточно-ориентированными, и это, как правило, намного более хороший API, чем Date / Calendar.

Вы можете использовать только свои парсерыи затем преобразовать возвращаемые значения в Date, но лично я бы рекомендовал использовать всю библиотеку вместо этого.

8 голосов
/ 11 января 2011

Как указано в этом посте , вы можете синхронизировать, использовать локальные темы или Joda-Time.

Например, используя ThreadLocals:

public class DateFormatTest {

  private static final ThreadLocal<DateFormat> df
                 = new ThreadLocal<DateFormat>(){
    @Override
    protected DateFormat initialValue() {
        return new SimpleDateFormat("yyyyMMdd");
    }
  };

  public Date convert(String source)
                     throws ParseException{
    Date d = df.get().parse(source);
    return d;
  }
}
1 голос
/ 11 января 2011

Нашли решение .

public class ThreadSafeSimpleDateFormat {

 private DateFormat df;

 public ThreadSafeSimpleDateFormat(String format) {
     this.df = new SimpleDateFormat(format);
 }

 public synchronized String format(Date date) {
     return df.format(date);
 }

 public synchronized Date parse(String string) throws ParseException {
     return df.parse(string);
 }
}
1 голос
/ 11 января 2011

Почему бы не поместить вызов SimpleDateFormat.parseObject() в свой собственный блок synchronized?

...