将字符串数组添加到日历数组中
Add String array into Calendar Array
基本上我需要从数据库中获取一个动态字符串数组(它将从数据库中填充,但在本例中它只是用于测试目的的固定大小),将其转换为日历数组以便我可以进行比较它到当前日期迭代以查看它是否等于 saturday/sunday 或新创建的日历数组中的任何日期。
我的问题是日历数组没有被正确填充,因为当 while 循环比较当前日期与假期集时没有考虑到它?
到目前为止,这是我的代码;
private static final String[] bankHolidays = {"25/03/2016","28/03/16","02/05/2016","20/05/2016"};
private static Set<Calendar> holidayDates;
static SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
public static void main(String[] args) throws ParseException {
if(holidayDates == null) {
holidayDates = new HashSet<Calendar>();
Date[] hol = new Date[bankHolidays.length];
for(int i=0;i<bankHolidays.length;i++){
Date d = sdf.parse(bankHolidays[i]);
hol[i]= d;
}
for(Date day : hol) {
Calendar c = Calendar.getInstance();
c.setTime(day);
holidayDates.add(c);
}
}
比较阶段代码为;
if (startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY && !holidayDates.contains(startCal.get(Calendar.DAY_OF_YEAR)) ) {
++workDays;
}
有什么建议吗?
编辑:我最终决定这样做,但促成因素之一是使用 MM 而不是 mm 来比较日期。
您的代码示例的固定、更清晰的版本 :)(与您的 JDK5 语言水平有关。可以通过 java 8 个流 API)
进一步改进
private static final String[] bankHolidays = {"25/03/2016", "28/03/16", "02/05/2016", "20/05/2016"};
private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
private static Set<Calendar> holidayDates;
public static void main(String[] args) throws ParseException {
if (holidayDates == null) {
holidayDates = new HashSet<Calendar>();
for (int i = 0; i < bankHolidays.length; i++) {
Calendar c = Calendar.getInstance();
Date date = sdf.parse(bankHolidays[i]);
c.setTime(date);
holidayDates.add(c);
}
}
}
基本上我需要从数据库中获取一个动态字符串数组(它将从数据库中填充,但在本例中它只是用于测试目的的固定大小),将其转换为日历数组以便我可以进行比较它到当前日期迭代以查看它是否等于 saturday/sunday 或新创建的日历数组中的任何日期。
我的问题是日历数组没有被正确填充,因为当 while 循环比较当前日期与假期集时没有考虑到它?
到目前为止,这是我的代码;
private static final String[] bankHolidays = {"25/03/2016","28/03/16","02/05/2016","20/05/2016"};
private static Set<Calendar> holidayDates;
static SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
public static void main(String[] args) throws ParseException {
if(holidayDates == null) {
holidayDates = new HashSet<Calendar>();
Date[] hol = new Date[bankHolidays.length];
for(int i=0;i<bankHolidays.length;i++){
Date d = sdf.parse(bankHolidays[i]);
hol[i]= d;
}
for(Date day : hol) {
Calendar c = Calendar.getInstance();
c.setTime(day);
holidayDates.add(c);
}
}
比较阶段代码为;
if (startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY && !holidayDates.contains(startCal.get(Calendar.DAY_OF_YEAR)) ) {
++workDays;
}
有什么建议吗?
编辑:我最终决定这样做,但促成因素之一是使用 MM 而不是 mm 来比较日期。
您的代码示例的固定、更清晰的版本 :)(与您的 JDK5 语言水平有关。可以通过 java 8 个流 API)
进一步改进private static final String[] bankHolidays = {"25/03/2016", "28/03/16", "02/05/2016", "20/05/2016"};
private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
private static Set<Calendar> holidayDates;
public static void main(String[] args) throws ParseException {
if (holidayDates == null) {
holidayDates = new HashSet<Calendar>();
for (int i = 0; i < bankHolidays.length; i++) {
Calendar c = Calendar.getInstance();
Date date = sdf.parse(bankHolidays[i]);
c.setTime(date);
holidayDates.add(c);
}
}
}