Используя этот код ниже, я заметил, что иногда дата форматируется некорректно. И чтобы сделать его еще более странным, иногда timeStamp будет иметь правильную дату, а timeStampCopy будет иметь неправильную дату и наоборот.Почему моя Java Calendar.setTime() спорадически устанавливает неправильные времена?
public static Timestamp method(String date, DateFormat dateFormat) throws Exception {
// date is always "2017-02-17"
// original
GregorianCalendar gCal = new GregorianCalendar();
gCal.setTime(dateFormat.parse(date));
Timestamp timeStamp = new Timestamp(gCal.getTimeInMillis());
// copy
GregorianCalendar gCalCopy= new GregorianCalendar();
gCalCopy.setTime(dateFormat.parse(date));
Timestamp timeStampCopy = new Timestamp(gCalCopy.getTimeInMillis());
if (!timeStamp.toString().contains("2017-02-17"))
System.out.println(timeStamp.toString());
if (!timeStampCopy.toString().contains("2017-02-17"))
System.out.println(timeStampCopy.toString());
return timeStamp;
}
Я не уверен, что может быть причиной, но я попытался это с помощью объекта Date, и я с теми же вопросами. Я думал, что это может быть проблема синтаксического анализа, но поскольку он делает то же самое дважды, я не уверен.
Ниже приведены некоторые из значений, которые я получаю:
timeStamp is: 2017-02-17 00:00:00.0
timeStampCopy is: 1700-02-17 00:00:00.0
Каковы ваши входы для функции –
Вы делитесь экземпляром 'DateFormat' между потоками? –
@ AndyTurner Да! Я как раз собирался добавить, что по какой-то причине, когда я добавил «synchronized» к методу, он, похоже, внезапно начал работать правильно. Не знаю, почему. – Overclock