Index: src/java/org/apache/lucene/document/DateTools.java
===================================================================
--- src/java/org/apache/lucene/document/DateTools.java (revision 776619)
+++ src/java/org/apache/lucene/document/DateTools.java (working copy)
@@ -60,6 +60,8 @@
MILLISECOND_FORMAT.setTimeZone(GMT);
}
+ private static final Calendar calInstance = Calendar.getInstance(GMT);
+
// cannot create, the class has static methods only
private DateTools() {}
@@ -72,7 +74,7 @@
* @return a string in format yyyyMMddHHmmssSSS or shorter,
* depeding on resolution; using GMT as timezone
*/
- public static String dateToString(Date date, Resolution resolution) {
+ public static synchronized String dateToString(Date date, Resolution resolution) {
return timeToString(date.getTime(), resolution);
}
@@ -85,47 +87,27 @@
* @return a string in format yyyyMMddHHmmssSSS or shorter,
* depeding on resolution; using GMT as timezone
*/
- public static String timeToString(long time, Resolution resolution) {
- Calendar cal = Calendar.getInstance(GMT);
-
- //protected in JDK's prior to 1.4
- //cal.setTimeInMillis(round(time, resolution));
+ public static synchronized String timeToString(long time, Resolution resolution) {
+ calInstance.setTimeInMillis(round(time, resolution));
+ Date date = calInstance.getTime();
- cal.setTime(new Date(round(time, resolution)));
-
- String result;
if (resolution == Resolution.YEAR) {
- synchronized (YEAR_FORMAT) {
- result = YEAR_FORMAT.format(cal.getTime());
- }
+ return YEAR_FORMAT.format(date);
} else if (resolution == Resolution.MONTH) {
- synchronized (MONTH_FORMAT) {
- result = MONTH_FORMAT.format(cal.getTime());
- }
+ return MONTH_FORMAT.format(date);
} else if (resolution == Resolution.DAY) {
- synchronized (DAY_FORMAT) {
- result = DAY_FORMAT.format(cal.getTime());
- }
+ return DAY_FORMAT.format(date);
} else if (resolution == Resolution.HOUR) {
- synchronized (HOUR_FORMAT) {
- result = HOUR_FORMAT.format(cal.getTime());
- }
+ return HOUR_FORMAT.format(date);
} else if (resolution == Resolution.MINUTE) {
- synchronized (MINUTE_FORMAT) {
- result = MINUTE_FORMAT.format(cal.getTime());
- }
+ return MINUTE_FORMAT.format(date);
} else if (resolution == Resolution.SECOND) {
- synchronized (SECOND_FORMAT) {
- result = SECOND_FORMAT.format(cal.getTime());
- }
+ return SECOND_FORMAT.format(date);
} else if (resolution == Resolution.MILLISECOND) {
- synchronized (MILLISECOND_FORMAT) {
- result = MILLISECOND_FORMAT.format(cal.getTime());
- }
- } else {
- throw new IllegalArgumentException("unknown resolution " + resolution);
+ return MILLISECOND_FORMAT.format(date);
}
- return result;
+
+ throw new IllegalArgumentException("unknown resolution " + resolution);
}
/**
@@ -138,7 +120,7 @@
* @throws ParseException if dateString is not in the
* expected format
*/
- public static long stringToTime(String dateString) throws ParseException {
+ public static synchronized long stringToTime(String dateString) throws ParseException {
return stringToDate(dateString).getTime();
}
@@ -152,40 +134,23 @@
* @throws ParseException if dateString is not in the
* expected format
*/
- public static Date stringToDate(String dateString) throws ParseException {
- Date date;
+ public static synchronized Date stringToDate(String dateString) throws ParseException {
if (dateString.length() == 4) {
- synchronized (YEAR_FORMAT) {
- date = YEAR_FORMAT.parse(dateString);
- }
+ return YEAR_FORMAT.parse(dateString);
} else if (dateString.length() == 6) {
- synchronized (MONTH_FORMAT) {
- date = MONTH_FORMAT.parse(dateString);
- }
+ return MONTH_FORMAT.parse(dateString);
} else if (dateString.length() == 8) {
- synchronized (DAY_FORMAT) {
- date = DAY_FORMAT.parse(dateString);
- }
+ return DAY_FORMAT.parse(dateString);
} else if (dateString.length() == 10) {
- synchronized (HOUR_FORMAT) {
- date = HOUR_FORMAT.parse(dateString);
- }
+ return HOUR_FORMAT.parse(dateString);
} else if (dateString.length() == 12) {
- synchronized (MINUTE_FORMAT) {
- date = MINUTE_FORMAT.parse(dateString);
- }
+ return MINUTE_FORMAT.parse(dateString);
} else if (dateString.length() == 14) {
- synchronized (SECOND_FORMAT) {
- date = SECOND_FORMAT.parse(dateString);
- }
+ return SECOND_FORMAT.parse(dateString);
} else if (dateString.length() == 17) {
- synchronized (MILLISECOND_FORMAT) {
- date = MILLISECOND_FORMAT.parse(dateString);
- }
- } else {
- throw new ParseException("Input is not valid date string: " + dateString, 0);
+ return MILLISECOND_FORMAT.parse(dateString);
}
- return date;
+ throw new ParseException("Input is not valid date string: " + dateString, 0);
}
/**
@@ -197,7 +162,7 @@
* @return the date with all values more precise than resolution
* set to 0 or 1
*/
- public static Date round(Date date, Resolution resolution) {
+ public static synchronized Date round(Date date, Resolution resolution) {
return new Date(round(date.getTime(), resolution));
}
@@ -211,47 +176,42 @@
* @return the date with all values more precise than resolution
* set to 0 or 1, expressed as milliseconds since January 1, 1970, 00:00:00 GMT
*/
- public static long round(long time, Resolution resolution) {
- Calendar cal = Calendar.getInstance(GMT);
-
- // protected in JDK's prior to 1.4
- //cal.setTimeInMillis(time);
+ public static synchronized long round(long time, Resolution resolution) {
+ calInstance.setTimeInMillis(time);
- cal.setTime(new Date(time));
-
if (resolution == Resolution.YEAR) {
- cal.set(Calendar.MONTH, 0);
- cal.set(Calendar.DAY_OF_MONTH, 1);
- cal.set(Calendar.HOUR_OF_DAY, 0);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
+ calInstance.set(Calendar.MONTH, 0);
+ calInstance.set(Calendar.DAY_OF_MONTH, 1);
+ calInstance.set(Calendar.HOUR_OF_DAY, 0);
+ calInstance.set(Calendar.MINUTE, 0);
+ calInstance.set(Calendar.SECOND, 0);
+ calInstance.set(Calendar.MILLISECOND, 0);
} else if (resolution == Resolution.MONTH) {
- cal.set(Calendar.DAY_OF_MONTH, 1);
- cal.set(Calendar.HOUR_OF_DAY, 0);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
+ calInstance.set(Calendar.DAY_OF_MONTH, 1);
+ calInstance.set(Calendar.HOUR_OF_DAY, 0);
+ calInstance.set(Calendar.MINUTE, 0);
+ calInstance.set(Calendar.SECOND, 0);
+ calInstance.set(Calendar.MILLISECOND, 0);
} else if (resolution == Resolution.DAY) {
- cal.set(Calendar.HOUR_OF_DAY, 0);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
+ calInstance.set(Calendar.HOUR_OF_DAY, 0);
+ calInstance.set(Calendar.MINUTE, 0);
+ calInstance.set(Calendar.SECOND, 0);
+ calInstance.set(Calendar.MILLISECOND, 0);
} else if (resolution == Resolution.HOUR) {
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
+ calInstance.set(Calendar.MINUTE, 0);
+ calInstance.set(Calendar.SECOND, 0);
+ calInstance.set(Calendar.MILLISECOND, 0);
} else if (resolution == Resolution.MINUTE) {
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
+ calInstance.set(Calendar.SECOND, 0);
+ calInstance.set(Calendar.MILLISECOND, 0);
} else if (resolution == Resolution.SECOND) {
- cal.set(Calendar.MILLISECOND, 0);
+ calInstance.set(Calendar.MILLISECOND, 0);
} else if (resolution == Resolution.MILLISECOND) {
// don't cut off anything
} else {
throw new IllegalArgumentException("unknown resolution " + resolution);
}
- return cal.getTime().getTime();
+ return calInstance.getTimeInMillis();
}
/** Specifies the time granularity. */