📄 abstractcalendarvalidator.java
字号:
} else {
DateFormatSymbols symbols = new DateFormatSymbols(locale);
formatter = new SimpleDateFormat(pattern, symbols);
}
formatter.setLenient(false);
return formatter;
}
/**
* <p>Returns a <code>DateFormat</code> for the specified Locale.</p>
*
* @param locale The locale a <code>DateFormat</code> is required for,
* system default if null.
* @return The <code>DateFormat</code> to created.
*/
protected Format getFormat(Locale locale) {
DateFormat formatter = null;
if (dateStyle >= 0 && timeStyle >= 0) {
if (locale == null) {
formatter = DateFormat.getDateTimeInstance(dateStyle, timeStyle);
} else {
formatter = DateFormat.getDateTimeInstance(dateStyle, timeStyle, locale);
}
} else if (timeStyle >= 0) {
if (locale == null) {
formatter = DateFormat.getTimeInstance(timeStyle);
} else {
formatter = DateFormat.getTimeInstance(timeStyle, locale);
}
} else {
int useDateStyle = dateStyle >= 0 ? dateStyle : DateFormat.SHORT;
if (locale == null) {
formatter = DateFormat.getDateInstance(useDateStyle);
} else {
formatter = DateFormat.getDateInstance(useDateStyle, locale);
}
}
formatter.setLenient(false);
return formatter;
}
/**
* <p>Compares a calendar value to another, indicating whether it is
* equal, less then or more than at a specified level.</p>
*
* @param value The Calendar value.
* @param compare The <code>Calendar</code> to check the value against.
* @param field The field <i>level</i> to compare to - e.g. specifying
* <code>Calendar.MONTH</code> will compare the year and month
* portions of the calendar.
* @return Zero if the first value is equal to the second, -1
* if it is less than the second or +1 if it is greater than the second.
*/
protected int compare(Calendar value, Calendar compare, int field) {
int result = 0;
// Compare Year
result = calculateCompareResult(value, compare, Calendar.YEAR);
if (result != 0 || field == Calendar.YEAR) {
return result;
}
// Compare Week of Year
if (field == Calendar.WEEK_OF_YEAR) {
return calculateCompareResult(value, compare, Calendar.WEEK_OF_YEAR);
}
// Compare Day of the Year
if (field == Calendar.DAY_OF_YEAR) {
return calculateCompareResult(value, compare, Calendar.DAY_OF_YEAR);
}
// Compare Month
result = calculateCompareResult(value, compare, Calendar.MONTH);
if (result != 0 || field == Calendar.MONTH) {
return result;
}
// Compare Week of Month
if (field == Calendar.WEEK_OF_MONTH) {
return calculateCompareResult(value, compare, Calendar.WEEK_OF_MONTH);
}
// Compare Date
result = calculateCompareResult(value, compare, Calendar.DATE);
if (result != 0 || (field == Calendar.DATE ||
field == Calendar.DAY_OF_MONTH ||
field == Calendar.DAY_OF_WEEK ||
field == Calendar.DAY_OF_WEEK_IN_MONTH)) {
return result;
}
// Compare Time fields
return compareTime(value, compare, field);
}
/**
* <p>Compares a calendar time value to another, indicating whether it is
* equal, less then or more than at a specified level.</p>
*
* @param value The Calendar value.
* @param compare The <code>Calendar</code> to check the value against.
* @param field The field <i>level</i> to compare to - e.g. specifying
* <code>Calendar.MINUTE</code> will compare the hours and minutes
* portions of the calendar.
* @return Zero if the first value is equal to the second, -1
* if it is less than the second or +1 if it is greater than the second.
*/
protected int compareTime(Calendar value, Calendar compare, int field) {
int result = 0;
// Compare Hour
result = calculateCompareResult(value, compare, Calendar.HOUR_OF_DAY);
if (result != 0 || (field == Calendar.HOUR || field == Calendar.HOUR_OF_DAY)) {
return result;
}
// Compare Minute
result = calculateCompareResult(value, compare, Calendar.MINUTE);
if (result != 0 || field == Calendar.MINUTE) {
return result;
}
// Compare Second
result = calculateCompareResult(value, compare, Calendar.SECOND);
if (result != 0 || field == Calendar.SECOND) {
return result;
}
// Compare Milliseconds
if (field == Calendar.MILLISECOND) {
return calculateCompareResult(value, compare, Calendar.MILLISECOND);
}
throw new IllegalArgumentException("Invalid field: " + field);
}
/**
* <p>Compares a calendar's quarter value to another, indicating whether it is
* equal, less then or more than the specified quarter.</p>
*
* @param value The Calendar value.
* @param compare The <code>Calendar</code> to check the value against.
* @param monthOfFirstQuarter The month that the first quarter starts.
* @return Zero if the first quarter is equal to the second, -1
* if it is less than the second or +1 if it is greater than the second.
*/
protected int compareQuarters(Calendar value, Calendar compare, int monthOfFirstQuarter) {
int valueQuarter = calculateQuarter(value, monthOfFirstQuarter);
int compareQuarter = calculateQuarter(compare, monthOfFirstQuarter);
if (valueQuarter < compareQuarter) {
return -1;
} else if (valueQuarter > compareQuarter) {
return 1;
} else {
return 0;
}
}
/**
* <p>Calculate the quarter for the specified Calendar.</p>
*
* @param calendar The Calendar value.
* @param monthOfFirstQuarter The month that the first quarter starts.
* @return The calculated quarter.
*/
private int calculateQuarter(Calendar calendar, int monthOfFirstQuarter) {
// Add Year
int year = calendar.get(Calendar.YEAR);
int month = (calendar.get(Calendar.MONTH) + 1);
int relativeMonth = (month >= monthOfFirstQuarter)
? (month - monthOfFirstQuarter)
: (month + (12 - monthOfFirstQuarter));
int quarter = ((relativeMonth / 3) + 1);
// adjust the year if the quarter doesn't start in January
if (month < monthOfFirstQuarter) {
--year;
}
return (year * 10) + quarter;
}
/**
* <p>Compares the field from two calendars indicating whether the field for the
* first calendar is equal to, less than or greater than the field from the
* second calendar.
*
* @param value The Calendar value.
* @param compare The <code>Calendar</code> to check the value against.
* @param field The field to compare for the calendars.
* @return Zero if the first calendar's field is equal to the seconds, -1
* if it is less than the seconds or +1 if it is greater than the seconds.
*/
private int calculateCompareResult(Calendar value, Calendar compare, int field) {
int difference = value.get(field) - compare.get(field);
if (difference < 0) {
return -1;
} else if (difference > 0) {
return 1;
} else {
return 0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -