2012-06-15 139 views
1

嗨全部如何在java中提供開始日期和結束日期時生成日期?如何在java中的兩個日期之間獲得除週末或週六或週日外的每一天?

類似如下:

例如:如果start date is 15-04-2012end date is 15-06-2012有這個我想日期是像下面和清單應省略saturdaysunday

1.15-04-2012, 2.16-04-2012, 3.17-04-2012, . . . . . . 15-06-2012

我已經做了類似下面的,但它會產生一個月如果日期範圍是當月的。 `

public static ConcurrentHashMap<String, String> getWorkingDaysMap(int year, int month, int day){ 
     int totalworkingdays=0,noofdays=0; 
     String nameofday = ""; 
     ConcurrentHashMap<String,String> workingDaysMap = new ConcurrentHashMap<String,String>(); 
     Map<String,String> holyDayMap = new LinkedHashMap<String,String>(); 
     noofdays = findNoOfDays(year,month,day); 

     for (int i = 1; i <= noofdays; i++) { 
      Date date = (new GregorianCalendar(year,month - 1, i)).getTime(); // year,month,day 
      SimpleDateFormat f = new SimpleDateFormat("EEEE"); 
      nameofday = f.format(date); 

      String daystr=""; 
      String monthstr=""; 

      if(i<10)daystr="0"; 
      if(month<10)monthstr="0"; 

      String formatedDate = daystr+i+"/"+monthstr+month+"/"+year; 

      if(!(nameofday.equals("Saturday") || nameofday.equals("Sunday"))){ 
       workingDaysMap.put(formatedDate,formatedDate); 
       totalworkingdays++; 
      } 
     } 

     return workingDaysMap; 
    } 

因此,請諮詢我如何去做。

問候 託尼

回答

0

使用以下joda-time

import org.joda.time.DateTimeConstants; 
import org.joda.time.LocalDate; 

public class DatesexcludingWeekend { 
    public static void main(String[] args) { 
     final LocalDate start = new LocalDate(2012, 06, 15); 
     final LocalDate end = new LocalDate(2012, 07, 14); 
     LocalDate weekday = start; 
     if (start.getDayOfWeek() == DateTimeConstants.SATURDAY|| start.getDayOfWeek() == DateTimeConstants.SUNDAY) { 
      weekday = weekday.plusWeeks(1).withDayOfWeek(DateTimeConstants.MONDAY); 
     } 

     while (weekday.isBefore(end)) { 
      System.out.println(weekday); 
      if (weekday.getDayOfWeek() == DateTimeConstants.FRIDAY) 
       weekday = weekday.plusDays(3); 
      else 
       weekday = weekday.plusDays(1); 
     } 
    } 
4
int noOfDaysBetween = 5; 
Calendar cal = Calendar.getInstance(); 
cal.setTime(startDate); 

for(int index = 0 ; index < noOfDaysBetween; index++){ 
    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); 
    if(dayOfWeek!=Calendar.SUNDAY && dayOfWeek!=Calendar.SATURDAY) { 
     System.out.println(cal.getTime()); 
    } 
    cal.add(Calendar.DATE, 1); 
} 
+0

什麼發生,如果天數超過31個?如果你看到這個問題,它的星期幾和結束日期不會在同一個月。 – SAR

+0

只需將此代碼添加到您的主要方法中,並嘗試運行並觀察行爲 –

+2

Calendar.DATE和Calendar.DAY_OF_MONTH是同義詞。 Calendar.add負責正確的結果。 – sudocode

1
public static void main(String[] args) { 

    Calendar calendar = Calendar.getInstance(); 

    //15-04-2012 
    calendar.set(Calendar.DAY_OF_MONTH, 15); 
    calendar.set(Calendar.YEAR, 2012); 
    calendar.set(Calendar.HOUR, 0); 
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.MONTH, 3); 
    Date start = calendar.getTime(); 

    //15-06-2012 
    calendar.set(Calendar.MONTH, 5); 
    Date end = calendar.getTime(); 

    calendar.setTime(start); 
    Date d = null; 
    while((d = calendar.getTime()).before(end) || d.equals(end)) { 
     int day = calendar.get(Calendar.DAY_OF_WEEK); 
     if (day != Calendar.SATURDAY && day != Calendar.SUNDAY) { 
      System.out.println(d); 
     } 
     calendar.add(Calendar.DAY_OF_MONTH, 1); 
    } 
} 
相關問題