如何查找Java中一個月的最後一個工作日?如果一個月的最後一天是星期六或星期日,則最後一個工作日應該是星期五。例如,如果3月31日是星期天,則最後一個工作日是3月29日星期五。如何在Java中查找一個月的最後一個工作日
爲了得到當月
Date today = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(today);
calendar.add(Calendar.MONTH, 1);
如何查找Java中一個月的最後一個工作日?如果一個月的最後一天是星期六或星期日,則最後一個工作日應該是星期五。例如,如果3月31日是星期天,則最後一個工作日是3月29日星期五。如何在Java中查找一個月的最後一個工作日
爲了得到當月
Date today = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(today);
calendar.add(Calendar.MONTH, 1);
嘗試這個
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));
謝謝。它正在工作 – Devika
僅供參考,麻煩的舊日期時間類,例如['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)類。 –
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類代替。
的LocalDate
類表示沒有時間一天和不同時區的日期,唯一的價值。
時區對確定日期至關重要。對於任何特定的時刻,日期因地區而異。例如,Paris France午夜後幾分鐘是新的一天,而在Montréal Québec仍然是「昨天」。
在continent/region
的格式指定一個proper time zone name,如America/Montreal
,Africa/Casablanca
,或Pacific/Auckland
。切勿使用3-4字母縮寫,如EST
或IST
,因爲它們是而不是真正的時區,不是標準化的,甚至不是唯一的(!)。
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 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
,YearQuarter
和more。
您的代碼在哪裏 –
您是否檢查過[這個](http://stackoverflow.com/questions/13647422/check-if-the-calendar-date-is-a-sunday) – Piyush
提示初學者:A)你是一個初學者 - 你所夢寐以求的一切都被問到了。這裏。已經。許多。時報。請在下次做一些研究。 B),即使你會做一些研究:這不是「我們爲你寫代碼服務」。你向我們展示你寫的代碼,並指出什麼不起作用。所以請:在[幫助]上花更多時間,並瞭解這裏的工作方式。 – GhostCat