下面列出了org.joda.time.LocalDate#getDayOfWeek ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Get whether is holiday or not.
*
* @param dateString the dateString in the format of "yyyyMMdd".
* @return 1: 法定节假日, 2: 正常周末, 3: 正常工作日 4:攒假的工作日
*/
public IntWritable evaluate(Text dateString) {
if (dateString == null) {
return null;
}
try {
String value = dayMap.get(dateString.toString());
if (DayType.HOLIDAY.getCode().equalsIgnoreCase(value)) {
result.set(1);
} else if (DayType.WORKDAY.getCode().equalsIgnoreCase(value)) {
result.set(4);
} else {
LocalDate date = LocalDate.parse(dateString.toString(), DEFAULT_DATE_FORMATTER);
if (date.getDayOfWeek() < 6) {
result.set(3);
} else {
result.set(2);
}
}
return result;
} catch (Exception e) {
return null;
}
}
boolean matches(LocalDate dato) {
for (FieldPart part : parts) {
if ("L".equals(part.modifier)) {
return dato.getDayOfWeek() == part.from && dato.getDayOfMonth() > (dato.dayOfMonth().getMaximumValue() - DAYS_PER_WEEK);
} else if ("#".equals(part.incrementModifier)) {
if (dato.getDayOfWeek() == part.from) {
int num = dato.getDayOfMonth() / 7;
return part.increment == (dato.getDayOfMonth() % 7 == 0 ? num : num + 1);
}
return false;
} else if (matches(dato.getDayOfWeek(), part)) {
return true;
}
}
return false;
}
boolean matches(LocalDate dato) {
for (FieldPart part : parts) {
if ("L".equals(part.modifier)) {
return dato.getDayOfMonth() == (dato.dayOfMonth().getMaximumValue() - (part.from == null ? 0 : part.from));
} else if ("W".equals(part.modifier)) {
if (dato.getDayOfWeek() <= 5) {
if (dato.getDayOfMonth() == part.from) {
return true;
} else if (dato.getDayOfWeek() == 5) {
return dato.plusDays(1).getDayOfMonth() == part.from;
} else if (dato.getDayOfWeek() == 1) {
return dato.minusDays(1).getDayOfMonth() == part.from;
}
}
} else if (matches(dato.getDayOfMonth(), part)) {
return true;
}
}
return false;
}
boolean matches(LocalDate dato) {
for (FieldPart part : parts) {
if ("L".equals(part.modifier)) {
return dato.getDayOfWeek() == part.from && dato.getDayOfMonth() > (dato.dayOfMonth().getMaximumValue() - DAYS_PER_WEEK);
} else if ("#".equals(part.incrementModifier)) {
if (dato.getDayOfWeek() == part.from) {
int num = dato.getDayOfMonth() / 7;
return part.increment == (dato.getDayOfMonth() % 7 == 0 ? num : num + 1);
}
return false;
} else if (matches(dato.getDayOfWeek(), part)) {
return true;
}
}
return false;
}
boolean matches(LocalDate dato) {
for (FieldPart part : parts) {
if ("L".equals(part.modifier)) {
return dato.getDayOfMonth() == (dato.dayOfMonth().getMaximumValue() - (part.from == null ? 0 : part.from));
} else if ("W".equals(part.modifier)) {
if (dato.getDayOfWeek() <= 5) {
if (dato.getDayOfMonth() == part.from) {
return true;
} else if (dato.getDayOfWeek() == 5) {
return dato.plusDays(1).getDayOfMonth() == part.from;
} else if (dato.getDayOfWeek() == 1) {
return dato.minusDays(1).getDayOfMonth() == part.from;
}
}
} else if (matches(dato.getDayOfMonth(), part)) {
return true;
}
}
return false;
}
boolean matches(LocalDate dato) {
for (FieldPart part : parts) {
if ("L".equals(part.modifier)) {
return dato.getDayOfWeek() == part.from && dato.getDayOfMonth() > (dato.dayOfMonth().getMaximumValue() - DAYS_PER_WEEK);
} else if ("#".equals(part.incrementModifier)) {
if (dato.getDayOfWeek() == part.from) {
int num = dato.getDayOfMonth() / 7;
return part.increment == (dato.getDayOfMonth() % 7 == 0 ? num : num + 1);
}
return false;
} else if (matches(dato.getDayOfWeek(), part)) {
return true;
}
}
return false;
}
boolean matches(LocalDate dato) {
for (FieldPart part : parts) {
if ("L".equals(part.modifier)) {
return dato.getDayOfMonth() == (dato.dayOfMonth().getMaximumValue() - (part.from == null ? 0 : part.from));
} else if ("W".equals(part.modifier)) {
if (dato.getDayOfWeek() <= 5) {
if (dato.getDayOfMonth() == part.from) {
return true;
} else if (dato.getDayOfWeek() == 5) {
return dato.plusDays(1).getDayOfMonth() == part.from;
} else if (dato.getDayOfWeek() == 1) {
return dato.minusDays(1).getDayOfMonth() == part.from;
}
}
} else if (matches(dato.getDayOfMonth(), part)) {
return true;
}
}
return false;
}
/**
* Returns the number of working days between two dates (inclusive). Saturday and Sunday are not considered working days.
*/
@Function("NETWORKDAYS")
@FunctionParameters({
@FunctionParameter("startDate"),
@FunctionParameter("endDate")})
public Integer NETWORKDAYS(Object startDate, Object endDate){
Date startDateObj = convertDateObject(startDate);
if(startDateObj==null) {
logCannotConvertToDate();
return null;
}
Date endDateObj = convertDateObject(endDate);
if(endDateObj==null){
logCannotConvertToDate();
return null;
}
else{
LocalDate cursorLocalDate=new LocalDate(startDateObj);
LocalDate endLocalDate=new LocalDate(endDateObj);
int workingDays=0;
if(cursorLocalDate.isAfter(endLocalDate)){
// Swap data information
LocalDate tmp=cursorLocalDate;
cursorLocalDate=endLocalDate;
endLocalDate=tmp;
}
while (Days.daysBetween(cursorLocalDate, endLocalDate).getDays()>0){
int dayOfWeek = cursorLocalDate.getDayOfWeek();
if(!(dayOfWeek==DateTimeConstants.SATURDAY ||
dayOfWeek==DateTimeConstants.SUNDAY)){
workingDays++;
}
cursorLocalDate=cursorLocalDate.plusDays(1);
}
return workingDays;
}
}
private static DateTime getStartDayOfFirstBiWeek(DateTime date){
LocalDate localDate = new LocalDate( date.getYear(), date.getMonthOfYear(), 1 );
while ( localDate.getDayOfWeek() != DateTimeConstants.MONDAY ) {
localDate = localDate.plusDays( 1 );
}
return localDate.toDateTimeAtStartOfDay();
}