Java根據(jù)開(kāi)始時(shí)間和結(jié)束時(shí)間及周幾計(jì)算日期的示例代碼
1、在Java 7中,java.time包不存在,所以我們需要使用java.util.Calendar和java.util.Date類來(lái)實(shí)現(xiàn)類似的功能。
以下是一個(gè)基于Java 7的示例代碼:
import java.util.Calendar; import java.util.Date; public class DateCalculator { public static Date calculateDate(Date startDate, Date endDate, int dayOfWeek) { Calendar startCal = Calendar.getInstance(); startCal.setTime(startDate); Calendar endCal = Calendar.getInstance(); endCal.setTime(endDate); // 確保輸入的dayOfWeek在正確的范圍內(nèi)(1-7,其中1代表周一,7代表周日) if (dayOfWeek < 1 || dayOfWeek > 7) { throw new IllegalArgumentException("Invalid dayOfWeek value. Must be between 1 and 7."); } // 將輸入的dayOfWeek轉(zhuǎn)換為Calendar的周幾(Calendar.MONDAY, Calendar.SUNDAY等) int targetDay = dayOfWeek + 1; // 因?yàn)镃alendar的周日是1,周一到周六依次遞增 // 查找開(kāi)始日期之后的第一個(gè)目標(biāo)周幾的日期 while (startCal.getTime().before(endDate)) { if (startCal.get(Calendar.DAY_OF_WEEK) == targetDay) { break; } startCal.add(Calendar.DAY_OF_MONTH, 1); } return startCal.getTime(); } public static void main(String[] args) throws Exception { long startDateTimestamp = 1377753600000L; // 開(kāi)始日期的Unix時(shí)間戳,例如2013-09-01 00:00:00 long endDateTimestamp = 1380345600000L; // 結(jié)束日期的Unix時(shí)間戳,例如2013-10-01 00:00:00 int targetDayOfWeek = 3; // 周三(在Java中,1=Monday, 7=Sunday) Date startDate = new Date(startDateTimestamp); Date endDate = new Date(endDateTimestamp); Date calculatedDate = calculateDate(startDate, endDate, targetDayOfWeek); if (calculatedDate != null) { System.out.println("The next occurrence of " + targetDayOfWeek + " (Wednesday) between " + startDate + " and " + endDate + " is on: " + calculatedDate); } else { System.out.println("There is no occurrence of the specified weekday between the given dates."); } } }
這段代碼首先將開(kāi)始日期和結(jié)束日期轉(zhuǎn)換為Calendar對(duì)象,然后使用循環(huán)尋找開(kāi)始日期之后的第一個(gè)指定周幾的日期。如果找到,就返回這個(gè)日期;否則,返回null。在main方法中,我們使用Unix時(shí)間戳創(chuàng)建了開(kāi)始和結(jié)束日期,并調(diào)用了calculateDate函數(shù)。
2、在Java 8中,根據(jù)開(kāi)始時(shí)間、結(jié)束時(shí)間和周幾來(lái)計(jì)算日期,可以使用java.time包下的類,如LocalDate、DayOfWeek等。
以下是一個(gè)示例代碼,展示了如何實(shí)現(xiàn)這一功能:
import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; public class DateCalculator { public static LocalDate calculateDate(LocalDate startDate, LocalDate endDate, int dayOfWeek) { // 確保輸入的dayOfWeek在正確的范圍內(nèi)(1-7,其中1代表周一,7代表周日) if (dayOfWeek < 1 || dayOfWeek > 7) { throw new IllegalArgumentException("Invalid dayOfWeek value. Must be between 1 and 7."); } // 將輸入的dayOfWeek轉(zhuǎn)換為DayOfWeek枚舉值 DayOfWeek targetDay = DayOfWeek.of(dayOfWeek); // 查找開(kāi)始日期之后的第一個(gè)目標(biāo)周幾的日期 LocalDate firstOccurrence = startDate.with(TemporalAdjusters.nextOrSame(targetDay)); // 如果第一個(gè)出現(xiàn)的日期在結(jié)束日期之后,則返回null,表示在指定區(qū)間內(nèi)沒(méi)有找到符合條件的日期 if (firstOccurrence.isAfter(endDate)) { return null; } return firstOccurrence; } public static void main(String[] args) { LocalDate startDate = LocalDate.of(2023, 9, 1); // 開(kāi)始日期 LocalDate endDate = LocalDate.of(2023, 9, 30); // 結(jié)束日期 int targetDayOfWeek = 3; // 周三(在Java中,1=Monday, 7=Sunday) LocalDate calculatedDate = calculateDate(startDate, endDate, targetDayOfWeek); if (calculatedDate != null) { System.out.println("The next occurrence of " + targetDayOfWeek + " (Wednesday) between " + startDate + " and " + endDate + " is on: " + calculatedDate); } else { System.out.println("There is no occurrence of the specified weekday between the given dates."); } } }
這段代碼首先定義了一個(gè)calculateDate方法,它接收開(kāi)始日期、結(jié)束日期以及表示周幾的整數(shù)作為參數(shù)。然后,使用TemporalAdjusters.nextOrSame方法找到開(kāi)始日期之后的第一個(gè)指定周幾的日期。如果這個(gè)日期在結(jié)束日期之后,則返回null。最后,在main方法中調(diào)用此函數(shù),并打印結(jié)果。
請(qǐng)注意,Java的DayOfWeek枚舉中,1代表星期一,2代表星期二,依此類推,直到7代表星期日。因此,如果要查找周日的日期,應(yīng)傳入7。
到此這篇關(guān)于Java根據(jù)開(kāi)始時(shí)間和結(jié)束時(shí)間以及周幾計(jì)算出日期的文章就介紹到這了,更多相關(guān)java根據(jù)周幾計(jì)算出日期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java?Date獲取本月的開(kāi)始時(shí)間與結(jié)束時(shí)間
- java獲取指定開(kāi)始時(shí)間與結(jié)束時(shí)間之間的所有日期
- java根據(jù)開(kāi)始時(shí)間結(jié)束時(shí)間計(jì)算中間間隔日期的實(shí)例代碼
- Java計(jì)算兩個(gè)日期時(shí)間之間的天數(shù)最簡(jiǎn)方法
- Java編程實(shí)現(xiàn)計(jì)算兩個(gè)日期的月份差實(shí)例代碼
- java計(jì)算兩個(gè)日期之前的天數(shù)實(shí)例(排除節(jié)假日和周末)
- Java簡(jiǎn)單計(jì)算兩個(gè)日期月數(shù)差的方法
- java計(jì)算兩個(gè)日期中間的時(shí)間
- 利用Java中Calendar計(jì)算兩個(gè)日期之間的天數(shù)和周數(shù)
- JAVA計(jì)算兩個(gè)日期相差的實(shí)例
相關(guān)文章
Java?設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解原型模式
原型模式是用于創(chuàng)建重復(fù)的對(duì)象,同時(shí)又能保證性能。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,今天通過(guò)本文給大家介紹下Java 原型設(shè)計(jì)模式,感興趣的朋友一起看看吧2022-04-04Java中反射動(dòng)態(tài)代理接口的詳解及實(shí)例
這篇文章主要介紹了Java中反射動(dòng)態(tài)代理接口的詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04SpringBoot如何配置MySQL和Oracl雙數(shù)據(jù)源(Mybatis)
這篇文章主要介紹了SpringBoot如何配置MySQL和Oracl雙數(shù)據(jù)源(Mybatis)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03SpringBoot啟動(dòng)時(shí)運(yùn)行特定代碼的多種方式小結(jié)
SpringBoot提供了多種方式在應(yīng)用程序啟動(dòng)時(shí)運(yùn)行特定的代碼,包括CommandLineRunner、ApplicationRunner、@PostConstruct、InitializingBean、事件機(jī)制和自定義注解等,下面就來(lái)具體介紹一下2025-01-01Java不指定長(zhǎng)度的二維數(shù)組實(shí)例
今天小編就為大家分享一篇Java不指定長(zhǎng)度的二維數(shù)組實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07SpringBoot+OCR實(shí)現(xiàn)PDF內(nèi)容識(shí)別的示例代碼
在SpringBoot中,您可以結(jié)合OCR庫(kù)來(lái)實(shí)現(xiàn)對(duì)PDF文件內(nèi)容的識(shí)別和提取,本文就來(lái)介紹一下如何使用 Tesseract 和 pdf2image 對(duì) PDF 文件進(jìn)行OCR識(shí)別和提取,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12