아래의 코드를 사용하여 날짜가 잘못 지정된 경우가있는 것으로 나타났습니다. 그리고 그것을 더욱 이상하게 만들기 위해 때로는 타임 스탬프가 올바른 날짜를 가지며 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