/*
* Copyright 2004-2010 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.slim3.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* A utility class for {@link Date}.
*
* @author higa
* @version 3.0
*/
public final class DateUtil {
/**
* The date pattern for ISO-8601.
*/
public static final String ISO_DATE_PATTERN = "yyyy-MM-dd";
/**
* The time pattern for ISO-8601.
*/
public static final String ISO_TIME_PATTERN = "HH:mm:ss";
/**
* The date time pattern for ISO-8601.
*/
public static final String ISO_DATE_TIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
/**
* Converts the object to {@link Date}.
*
* @param o
* the object
* @return the converted value
*/
public static Date toDate(Object o) {
if (o == null) {
return null;
} else if (o.getClass() == Date.class) {
return (Date) o;
} else if (o instanceof Date) {
return new Date(((Date) o).getTime());
} else if (o instanceof Calendar) {
return new Date(((Calendar) o).getTime().getTime());
} else {
return toDate(o.toString(), ISO_DATE_PATTERN);
}
}
/**
* Converts the object to the date part of the date.
*
* @param o
* the object
* @return the date part of the date
*/
public static Date toDateAndClearTimePart(Object o) {
return clearTimePart(toDate(o));
}
/**
* Converts the object to the time part of the date.
*
* @param o
* the object
* @return the time part of the date
*/
public static Date toDateAndClearDatePart(Object o) {
return clearDatePart(toDate(o));
}
/**
* Converts the text to {@link Date}.
*
* @param text
* the text
* @param pattern
* the pattern for {@link SimpleDateFormat}
* @return the converted value
* @throws NullPointerException
* if the pattern parameter is null
* @throws WrapRuntimeException
* if an error occurred while parsing the text
*/
public static Date toDate(String text, String pattern)
throws NullPointerException, WrapRuntimeException {
if (pattern == null) {
throw new NullPointerException("The pattern parameter is null.");
}
if (StringUtil.isEmpty(text)) {
return null;
}
try {
SimpleDateFormat df = new SimpleDateFormat(pattern);
df.setTimeZone(TimeZoneLocator.get());
return df.parse(text);
} catch (ParseException cause) {
throw new WrapRuntimeException(
"An error occurred while parsing the text("
+ text
+ "). Error message: "
+ cause.getMessage(),
cause);
}
}
/**
* Converts {@link Date} to {@link Calendar}.
*
* @param date
* the date
* @return {@link Calendar}
*/
public static Calendar toCalendar(Date date) {
if (date == null) {
return null;
}
Calendar cal =
Calendar.getInstance(TimeZoneLocator.get(), LocaleLocator.get());
cal.setTime(date);
return cal;
}
/**
* Clears the time part of the date.
*
* @param date
* the date
* @return the date part of the date
*/
public static Date clearTimePart(Date date) {
if (date == null) {
return null;
}
Calendar cal = toCalendar(date);
cal = clearTimePart(cal);
return cal.getTime();
}
/**
* Clears the time part of the calendar.
*
* @param cal
* the calendar
* @return the date part of the calendar
*/
public static Calendar clearTimePart(Calendar cal) {
if (cal == null) {
return null;
}
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal;
}
/**
* Clears the date part of the date.
*
* @param date
* the date
* @return the time part of the date
*/
public static Date clearDatePart(Date date) {
if (date == null) {
return null;
}
Calendar cal = toCalendar(date);
cal = clearDatePart(cal);
return cal.getTime();
}
/**
* Clears the date part of the calendar.
*
* @param cal
* the calendar
* @return the time part of the calendar
*/
public static Calendar clearDatePart(Calendar cal) {
if (cal == null) {
return null;
}
cal.set(Calendar.YEAR, 1970);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DATE, 1);
return cal;
}
/**
* Converts the object value to text.
*
* @param value
* the object value
* @return the converted value
*/
public static String toString(Object value) {
return toString(toDate(value));
}
/**
* Converts the object value to text.
*
* @param value
* the object value
* @param pattern
* the pattern for {@link SimpleDateFormat}
* @return the converted value
*/
public static String toString(Object value, String pattern) {
return toString(toDate(value), pattern);
}
/**
* Converts the {@link Date} value to text.
*
* @param value
* the {@link Date} value
*
* @return the converted value
*/
public static String toString(Date value) {
return toString(value, ISO_DATE_PATTERN);
}
/**
* Converts the {@link Date} value to text.
*
* @param value
* the {@link Date} value
* @param pattern
* the pattern for {@link SimpleDateFormat}
* @return the converted value
* @throws NullPointerException
* if the pattern parameter is null
*/
public static String toString(Date value, String pattern)
throws NullPointerException {
if (pattern == null) {
throw new NullPointerException("The pattern parameter is null.");
}
if (value == null) {
return null;
}
SimpleDateFormat df = new SimpleDateFormat(pattern);
df.setTimeZone(TimeZoneLocator.get());
return df.format(value);
}
private DateUtil() {
}
}