2017-03-03 122 views
-6

如何查找Java中一個月的最後一個工作日?如果一個月的最後一天是星期六或星期日,則最後一個工作日應該是星期五。例如,如果3月31日是星期天,則最後一個工作日是3月29日星期五。如何在Java中查找一個月的最後一個工作日

爲了得到當月

Date today = new Date(); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTime(today); 
calendar.add(Calendar.MONTH, 1); 
+4

您的代碼在哪裏 –

+0

您是否檢查過[這個](http://stackoverflow.com/questions/13647422/check-if-the-calendar-date-is-a-sunday) – Piyush

+3

提示初學者:A)你是一個初學者 - 你所夢寐以求的一切都被問到了。這裏。已經。許多。時報。請在下次做一些研究。 B),即使你會做一些研究:這不是「我們爲你寫代碼服務」。你向我們展示你寫的代碼,並指出什麼不起作用。所以請:在[幫助]上花更多時間,並瞭解這裏的工作方式。 – GhostCat

回答

0

嘗試這個

Date today = new Date(); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTime(today); 

calendar.add(Calendar.MONTH, 1);//Used for finding next month 
calendar.set(Calendar.DAY_OF_MONTH, 1);//Setting the Day of month as 1 for starting  
do{ 
     calendar.add(Calendar.DATE, -1); //In the first case decease day by 1 so get the this months last day 
    } while (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY 
      || calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY); // Checking whether the last day is saturday or sunday then it will decrease by 1 
    Date lastDayOfMonth = calendar.getTime(); 
    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
    System.out.println("Today: " + sdf.format(today)); 
    System.out.println("Last Day of Month: " +df.format(lastDayOfMonth)); 
+0

謝謝。它正在工作 – Devika

+0

僅供參考,麻煩的舊日期時間類,例如['java.util.Date'](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html ),['java.util.Calendar'](https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html)和'java.text.SimpleTextFormat'現在是[遺留](https://en.wikipedia.org/wiki/Legacy_system),由[java.time]代替(https://docs.oracle.com/javase/8/docs/api/java/time/package -summary.html)類。 –

2

TL;博士

LocalDate.now(ZoneId.of("America/Montreal"))      // Today 
     .with(TemporalAdjusters.firstDayOfNextMonth())   // First of next month. 
     .with(org.threeten.extra.Temporals.previousWorkingDay()) // Move backwards in time, looking for first day that is not Saturday nor Sunday. 

避免遺留類

您是使用麻煩的舊日期 - 時間班,現在是遺留的,由java.time類代替。

使用java.time

LocalDate類表示沒有時間一天和不同時區的日期,唯一的價值。

時區對確定日期至關重要。對於任何特定的時刻,日期因地區而異。例如,Paris France午夜後幾分鐘是新的一天,而在Montréal Québec仍然是「昨天」。

continent/region的格式指定一個proper time zone name,如America/MontrealAfrica/Casablanca,或Pacific/Auckland。切勿使用3-4字母縮寫,如ESTIST,因爲它們是而不是真正的時區,不是標準化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of("America/Montreal"); 
LocalDate today = LocalDate.now(z); 

TemporalAdjuster接口提供了一種調整日期時間值。 TemporalAdjusters類(注意複數s)提供了幾個方便的實現。

LocalDate endOfMonth = today.with(TemporalAdjusters.lastDayOfMonth()); 

ThreeTen-Extra項目擴展java.time與附加功能。這包括更多的TemporalAdjuster實現。其中之一是previousWorkingDay跳過週六和週日。爲了使用它,我們需要跨過月底,因爲那一天本身可能是一個工作日。

LocalDate previousWorkingDay = endOfMonth.plusDays(1).with(org.threeten.extra.Temporals.previousWorkingDay()); 

關於java.time

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore

相關問題