我计算合并的最后一个工作日如下 -
•AI.VOUCHER_DT> = PST在本月的最后一个工作日下午5:00
•AI.VOUCHER_DT< =太平洋标准时间晚上11:59:59在该月的最后一个日历日
•当前系统日期/时间<下列第3个工作日
例如,2月28日(周六)是该月的最后一个日历日,时间应计文件应包括在2月27日下午5点(周五)至下午23:59:59之间创建的凭证。 (周六)。记录将保留在应计中,直到3月4日,这是本例中的第3个工作日。
我如何比较这个。
答案 0 :(得分:1)
我创建了一个财务日期类,用于生成您要求的3个会计日期。
我进行了两次测试,一次是2015年2月,另一次是2016年8月。以下是测试结果。
package com.ggl.testing;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class FiscalDate {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z");
sdf.setTimeZone(getTimeZone());
displayDates(sdf, 2015, 1);
displayDates(sdf, 2016, 7);
}
private static void displayDates(SimpleDateFormat sdf, int year, int month) {
Date date = calculateLastBusinessDay(year, month);
System.out.println(sdf.format(date));
date = calculateLastDay(year, month);
System.out.println(sdf.format(date));
date = calculateThirdBusinessDay(year, month);
System.out.println(sdf.format(date));
System.out.println();
}
public static Date calculateLastBusinessDay(int year, int month) {
Calendar calendar = calculateLastCalendarDay(year, month);
while (!isWeekday(calendar)) {
calendar.add(Calendar.DAY_OF_MONTH, -1);
}
calendar.set(Calendar.HOUR_OF_DAY, 17);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
public static Date calculateLastDay(int year, int month) {
Calendar calendar = calculateLastCalendarDay(year, month);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
public static Date calculateThirdBusinessDay(int year, int month) {
Calendar calendar = calculateLastCalendarDay(year, month);
int weekdayCount = 0;
while (weekdayCount < 3) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
weekdayCount += isWeekday(calendar) ? 1 : 0;
}
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
private static Calendar calculateLastCalendarDay(int year, int month) {
Calendar calendar = Calendar.getInstance(getTimeZone());
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH,
calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return calendar;
}
private static boolean isWeekday(Calendar calendar) {
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
return (dayOfWeek == Calendar.MONDAY)
|| (dayOfWeek == Calendar.TUESDAY)
|| (dayOfWeek == Calendar.WEDNESDAY)
|| (dayOfWeek == Calendar.THURSDAY)
|| (dayOfWeek == Calendar.FRIDAY);
}
private static TimeZone getTimeZone() {
return TimeZone.getTimeZone("America/Los_Angeles");
}
}
第一个日期是该月的最后一个工作日,第二个日期是该月的最后一天,第三个日期是下个月的第三个工作日。
这是代码。我使用Calendar类来进行日期计算。输入月份为零。 0 = 1月,1 = 2月等。
{{1}}
如果您所在的地点与美国不同,则会使用不同的时区。