📄 datetool.java
字号:
}
// do they want a time instance?
else if (format.endsWith("_time"))
{
String fmt = format.substring(0, format.length() - 5);
int style = getStyleAsInt(fmt);
df = getDateFormat(-1, style, locale, timezone);
}
// ok, they either want a custom or date-time instance
else
{
int style = getStyleAsInt(format);
if (style < 0)
{
// we have a custom format
df = new SimpleDateFormat(format, locale);
df.setTimeZone(timezone);
}
else
{
// they want a date-time instance
df = getDateFormat(style, style, locale, timezone);
}
}
return df;
}
/**
* Returns a {@link DateFormat} instance for the specified
* date style, time style, {@link Locale}, and {@link TimeZone}.
*
* @param dateStyle the date style
* @param timeStyle the time style
* @param locale the {@link Locale} to be used
* @param timezone the {@link TimeZone} to be used
* @return an instance of {@link DateFormat}
* @see #getDateFormat(int timeStyle, int dateStyle, Locale locale, TimeZone timezone)
* @since VelocityTools 1.1
*/
public DateFormat getDateFormat(String dateStyle, String timeStyle,
Locale locale, TimeZone timezone)
{
int ds = getStyleAsInt(dateStyle);
int ts = getStyleAsInt(timeStyle);
return getDateFormat(ds, ts, locale, timezone);
}
/**
* Returns a {@link DateFormat} instance for the specified
* time style, date style, {@link Locale}, and {@link TimeZone}.
*
* @param dateStyle the date style (date will be ignored if this is
* less than zero and the date style is not)
* @param timeStyle the time style (time will be ignored if this is
* less than zero and the date style is not)
* @param locale the {@link Locale} to be used
* @param timezone the {@link TimeZone} to be used
* @return an instance of {@link DateFormat} or <code>null</code>
* if an instance cannot be constructed with the given
* parameters
* @since VelocityTools 1.1
*/
protected DateFormat getDateFormat(int dateStyle, int timeStyle,
Locale locale, TimeZone timezone)
{
try
{
DateFormat df;
if (dateStyle < 0 && timeStyle < 0)
{
// no style was specified, use default instance
df = DateFormat.getInstance();
}
else if (timeStyle < 0)
{
// only a date style was specified
df = DateFormat.getDateInstance(dateStyle, locale);
}
else if (dateStyle < 0)
{
// only a time style was specified
df = DateFormat.getTimeInstance(timeStyle, locale);
}
else
{
df = DateFormat.getDateTimeInstance(dateStyle, timeStyle,
locale);
}
df.setTimeZone(timezone);
return df;
}
catch (Exception suppressed)
{
// let it go...
return null;
}
}
/**
* Checks a string to see if it matches one of the standard DateFormat
* style patterns: FULL, LONG, MEDIUM, SHORT, or DEFAULT. If it does,
* it will return the integer constant for that pattern. If not, it
* will return -1.
*
* @see DateFormat
* @param style the string to be checked
* @return the int identifying the style pattern
* @since VelocityTools 1.1
*/
protected int getStyleAsInt(String style)
{
// avoid needlessly running through all the string comparisons
if (style == null || style.length() < 4 || style.length() > 7) {
return -1;
}
if (style.equalsIgnoreCase("full"))
{
return DateFormat.FULL;
}
if (style.equalsIgnoreCase("long"))
{
return DateFormat.LONG;
}
if (style.equalsIgnoreCase("medium"))
{
return DateFormat.MEDIUM;
}
if (style.equalsIgnoreCase("short"))
{
return DateFormat.SHORT;
}
if (style.equalsIgnoreCase("default"))
{
return DateFormat.DEFAULT;
}
// ok, it's not any of the standard patterns
return -1;
}
// ------------------------- date conversion methods ---------------
/**
* Converts an object to an instance of {@link Date} using the
* format returned by {@link #getFormat()},the {@link Locale} returned
* by {@link #getLocale()}, and the {@link TimeZone} returned by
* {@link #getTimeZone()} if the object is not already an instance
* of Date, Calendar, or Long.
*
* @param obj the date to convert
* @return the object as a {@link Date} or <code>null</code> if no
* conversion is possible
*/
public Date toDate(Object obj)
{
return toDate(getFormat(), obj, getLocale(), getTimeZone());
}
/**
* Converts an object to an instance of {@link Date} using the
* specified format,the {@link Locale} returned by
* {@link #getLocale()}, and the {@link TimeZone} returned by
* {@link #getTimeZone()} if the object is not already an instance
* of Date, Calendar, or Long.
*
* @param format - the format the date is in
* @param obj - the date to convert
* @return the object as a {@link Date} or <code>null</code> if no
* conversion is possible
* @see #toDate(String format, Object obj, Locale locale)
*/
public Date toDate(String format, Object obj)
{
return toDate(format, obj, getLocale(), getTimeZone());
}
/**
* Converts an object to an instance of {@link Date} using the
* specified format and {@link Locale} if the object is not already
* an instance of Date, Calendar, or Long.
*
* @param format - the format the date is in
* @param obj - the date to convert
* @param locale - the {@link Locale}
* @return the object as a {@link Date} or <code>null</code> if no
* conversion is possible
* @see SimpleDateFormat#parse
*/
public Date toDate(String format, Object obj, Locale locale)
{
return toDate(format, obj, locale, getTimeZone());
}
/**
* Converts an object to an instance of {@link Date} using the
* specified format, {@link Locale}, and {@link TimeZone} if the
* object is not already an instance of Date, Calendar, or Long.
*
* @param format - the format the date is in
* @param obj - the date to convert
* @param locale - the {@link Locale}
* @param timezone - the {@link TimeZone}
* @return the object as a {@link Date} or <code>null</code> if no
* conversion is possible
* @see #getDateFormat
* @see SimpleDateFormat#parse
*/
public Date toDate(String format, Object obj,
Locale locale, TimeZone timezone)
{
if (obj == null)
{
return null;
}
if (obj instanceof Date)
{
return (Date)obj;
}
if (obj instanceof Calendar)
{
return ((Calendar)obj).getTime();
}
if (obj instanceof Number)
{
Date d = new Date();
d.setTime(((Number)obj).longValue());
return d;
}
try
{
//try parsing w/a customized SimpleDateFormat
DateFormat parser = getDateFormat(format, locale, timezone);
return parser.parse(String.valueOf(obj));
}
catch (Exception e)
{
return null;
}
}
/**
* Converts an object to an instance of {@link Calendar} using the
* locale returned by {@link #getLocale()} if necessary.
*
* @param obj the date to convert
* @return the converted date
* @see #toCalendar(Object obj, Locale locale)
*/
public Calendar toCalendar(Object obj)
{
return toCalendar(obj, getLocale());
}
/**
* Converts an object to an instance of {@link Calendar} using the
* locale returned by {@link #getLocale()} if necessary.
*
* @param obj the date to convert
* @param locale the locale used
* @return the converted date
* @see #toDate(String format, Object obj, Locale locale)
* @see Calendar
*/
public Calendar toCalendar(Object obj, Locale locale)
{
if (obj == null)
{
return null;
}
if (obj instanceof Calendar)
{
return (Calendar)obj;
}
//try to get a date out of it
Date date = toDate(obj);
if (date == null)
{
return null;
}
//convert the date to a calendar
Calendar cal = Calendar.getInstance(locale);
cal.setTime(date);
// HACK: Force all fields to update. see link for explanation of this.
//http://java.sun.com/j2se/1.4/docs/api/java/util/Calendar.html
cal.getTime();
return cal;
}
// ------------------------- default toString() implementation ------------
/**
* @return the result of {@link #getDate()} formatted according to the result
* of {@link #getFormat()}.
* @see #format(String format, Object obj)
*/
public String toString()
{
return format(getFormat(), getDate());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -