Java根據(jù)開始時間和結(jié)束時間及周幾計算日期的示例代碼
1、在Java 7中,java.time包不存在,所以我們需要使用java.util.Calendar和java.util.Date類來實現(xiàn)類似的功能。
以下是一個基于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; // 因為Calendar的周日是1,周一到周六依次遞增
// 查找開始日期之后的第一個目標(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; // 開始日期的Unix時間戳,例如2013-09-01 00:00:00
long endDateTimestamp = 1380345600000L; // 結(jié)束日期的Unix時間戳,例如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.");
}
}
}這段代碼首先將開始日期和結(jié)束日期轉(zhuǎn)換為Calendar對象,然后使用循環(huán)尋找開始日期之后的第一個指定周幾的日期。如果找到,就返回這個日期;否則,返回null。在main方法中,我們使用Unix時間戳創(chuàng)建了開始和結(jié)束日期,并調(diào)用了calculateDate函數(shù)。
2、在Java 8中,根據(jù)開始時間、結(jié)束時間和周幾來計算日期,可以使用java.time包下的類,如LocalDate、DayOfWeek等。
以下是一個示例代碼,展示了如何實現(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);
// 查找開始日期之后的第一個目標(biāo)周幾的日期
LocalDate firstOccurrence = startDate.with(TemporalAdjusters.nextOrSame(targetDay));
// 如果第一個出現(xiàn)的日期在結(jié)束日期之后,則返回null,表示在指定區(qū)間內(nèi)沒有找到符合條件的日期
if (firstOccurrence.isAfter(endDate)) {
return null;
}
return firstOccurrence;
}
public static void main(String[] args) {
LocalDate startDate = LocalDate.of(2023, 9, 1); // 開始日期
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.");
}
}
}這段代碼首先定義了一個calculateDate方法,它接收開始日期、結(jié)束日期以及表示周幾的整數(shù)作為參數(shù)。然后,使用TemporalAdjusters.nextOrSame方法找到開始日期之后的第一個指定周幾的日期。如果這個日期在結(jié)束日期之后,則返回null。最后,在main方法中調(diào)用此函數(shù),并打印結(jié)果。
請注意,Java的DayOfWeek枚舉中,1代表星期一,2代表星期二,依此類推,直到7代表星期日。因此,如果要查找周日的日期,應(yīng)傳入7。
到此這篇關(guān)于Java根據(jù)開始時間和結(jié)束時間以及周幾計算出日期的文章就介紹到這了,更多相關(guān)java根據(jù)周幾計算出日期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?設(shè)計模式以虹貓藍(lán)兔的故事講解原型模式
原型模式是用于創(chuàng)建重復(fù)的對象,同時又能保證性能。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式,今天通過本文給大家介紹下Java 原型設(shè)計模式,感興趣的朋友一起看看吧2022-04-04
SpringBoot如何配置MySQL和Oracl雙數(shù)據(jù)源(Mybatis)
這篇文章主要介紹了SpringBoot如何配置MySQL和Oracl雙數(shù)據(jù)源(Mybatis)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
SpringBoot啟動時運行特定代碼的多種方式小結(jié)
SpringBoot提供了多種方式在應(yīng)用程序啟動時運行特定的代碼,包括CommandLineRunner、ApplicationRunner、@PostConstruct、InitializingBean、事件機制和自定義注解等,下面就來具體介紹一下2025-01-01
SpringBoot+OCR實現(xiàn)PDF內(nèi)容識別的示例代碼
在SpringBoot中,您可以結(jié)合OCR庫來實現(xiàn)對PDF文件內(nèi)容的識別和提取,本文就來介紹一下如何使用 Tesseract 和 pdf2image 對 PDF 文件進(jìn)行OCR識別和提取,具有一定的參考價值,感興趣的可以了解一下2023-12-12

