java獲取當(dāng)日、本周、本月、本年的實(shí)現(xiàn)方式
更新時(shí)間:2026年02月12日 09:20:18 作者:濤哥是個(gè)大帥比
文章主要討論了在Java中處理日期和時(shí)間時(shí)使用`LocalDateTime`和`Calendar`類的不同方法,并提到了在使用`LocalDateTime`時(shí)需要手動(dòng)進(jìn)行格式轉(zhuǎn)換
1、使用 LocalDateTime
最后的格式需要自己轉(zhuǎn)換一下
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;
public class DateUtils {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
LocalDate firstDayOfYear = today.withDayOfYear(1);
LocalDate lastDayOfYear = today.withDayOfYear(today.lengthOfYear());
// 當(dāng)日
LocalDateTime startOfDay = LocalDateTime.of(today, LocalTime.MIN);
LocalDateTime endOfDay = LocalDateTime.of(today, LocalTime.MAX);
// 本周(周一到周日)
LocalDate startOfWeek = today.with(TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
LocalDate endOfWeek = today.with(TemporalAdjusters.nextOrSame(java.time.DayOfWeek.SUNDAY));
LocalDateTime startOfWeekDateTime = LocalDateTime.of(startOfWeek, LocalTime.MIN);
LocalDateTime endOfWeekDateTime = LocalDateTime.of(endOfWeek, LocalTime.MAX);
// 本月
LocalDateTime startOfMonth = LocalDateTime.of(firstDayOfMonth, LocalTime.MIN);
LocalDateTime endOfMonth = LocalDateTime.of(lastDayOfMonth, LocalTime.MAX);
// 本年
LocalDateTime startOfYear = LocalDateTime.of(firstDayOfYear, LocalTime.MIN);
LocalDateTime endOfYear = LocalDateTime.of(lastDayOfYear, LocalTime.MAX);
// 打印結(jié)果
System.out.println("當(dāng)日開始時(shí)間: " + startOfDay);
System.out.println("當(dāng)日結(jié)束時(shí)間: " + endOfDay);
System.out.println("本周開始時(shí)間: " + startOfWeekDateTime);
System.out.println("本周結(jié)束時(shí)間: " + endOfWeekDateTime);
System.out.println("本月開始時(shí)間: " + startOfMonth);
System.out.println("本月結(jié)束時(shí)間: " + endOfMonth);
System.out.println("本年開始時(shí)間: " + startOfYear);
System.out.println("本年結(jié)束時(shí)間: " + endOfYear);
}
}2、使用 Calendar
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateUtil {
/**
* 獲取當(dāng)天開始時(shí)間
*
* @return
*/
public static Date getDayBegin() {
Calendar cal = Calendar.getInstance();
//0點(diǎn)
cal.set(Calendar.HOUR_OF_DAY, 0);
//0分
cal.set(Calendar.MINUTE, 0);
//0秒
cal.set(Calendar.SECOND, 0);
//0毫秒
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 獲取當(dāng)天結(jié)束時(shí)間
*
* @return
*/
public static Date getDayEnd() {
Calendar cal = Calendar.getInstance();
//23點(diǎn)
cal.set(Calendar.HOUR_OF_DAY, 23);
//59分
cal.set(Calendar.MINUTE, 59);
//59秒
cal.set(Calendar.SECOND, 59);
return cal.getTime();
}
/**
* 獲取昨天開始時(shí)間
*
* @return
*/
public static Date getBeginDayOfYesterday() {
Calendar cal = Calendar.getInstance();
//當(dāng)天開始時(shí)間
cal.setTime(getDayBegin());
//當(dāng)天月份天數(shù)減1
cal.add(Calendar.DAY_OF_MONTH, -1);
return cal.getTime();
}
/**
* 獲取昨天結(jié)束時(shí)間
*
* @return
*/
public static Date getEndDayOfYesterday() {
Calendar cal = Calendar.getInstance();
//當(dāng)天結(jié)束時(shí)間
cal.setTime(getDayEnd());
//當(dāng)天月份天數(shù)減1
cal.add(Calendar.DAY_OF_MONTH, -1);
return cal.getTime();
}
/**
* 獲取明天開始時(shí)間
*
* @return
*/
public static Date getBeginDayOfTomorrow() {
Calendar cal = Calendar.getInstance();
//當(dāng)天開始時(shí)間
cal.setTime(getDayBegin());
//當(dāng)天月份天數(shù)加1
cal.add(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
/**
* 獲取明天結(jié)束時(shí)間
*
* @return
*/
public static Date getEndDayOfTomorrow() {
Calendar cal = Calendar.getInstance();
//當(dāng)天結(jié)束時(shí)間
cal.setTime(getDayEnd());
//當(dāng)天月份天數(shù)加1
cal.add(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
/**
* 獲取某個(gè)日期的開始時(shí)間
*
* @param d
* @return
*/
public static Timestamp getDayStartTime(Date d) {
Calendar calendar = Calendar.getInstance();
if (null != d) {
calendar.setTime(d);
}
calendar.set(calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
return new Timestamp(calendar.getTimeInMillis());
}
/**
* 獲取某個(gè)日期的結(jié)束時(shí)間
*
* @param d
* @return
*/
public static Timestamp getDayEndTime(Date d) {
Calendar calendar = Calendar.getInstance();
if (null != d) {
calendar.setTime(d);
}
calendar.set(calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
calendar.set(Calendar.MILLISECOND, 999);
return new Timestamp(calendar.getTimeInMillis());
}
/**
* 獲取本周的開始時(shí)間
*
* @return
*/
public static Date getBeginDayOfWeek() {
Date date = new Date();
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == 1) {
dayOfWeek += 7;
}
cal.add(Calendar.DATE, 2 - dayOfWeek);
return getDayStartTime(cal.getTime());
}
/**
* 獲取本周的結(jié)束時(shí)間
*
* @return
*/
public static Date getEndDayOfWeek() {
Calendar cal = Calendar.getInstance();
cal.setTime(getBeginDayOfWeek());
cal.add(Calendar.DAY_OF_WEEK, 6);
Date weekEndSta = cal.getTime();
return getDayEndTime(weekEndSta);
}
/**
* 獲取上周開始時(shí)間
*/
@SuppressWarnings("unused")
public static Date getBeginDayOfLastWeek() {
Date date = new Date();
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
if (dayofweek == 1) {
dayofweek += 7;
}
cal.add(Calendar.DATE, 2 - dayofweek - 7);
return getDayStartTime(cal.getTime());
}
/**
* 獲取上周的結(jié)束時(shí)間
*
* @return
*/
public static Date getEndDayOfLastWeek() {
Calendar cal = Calendar.getInstance();
cal.setTime(getBeginDayOfLastWeek());
cal.add(Calendar.DAY_OF_WEEK, 6);
Date weekEndSta = cal.getTime();
return getDayEndTime(weekEndSta);
}
/**
* 獲取今年是哪一年
*
* @return
*/
public static Integer getNowYear() {
Date date = new Date();
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return Integer.valueOf(gc.get(1));
}
/**
* 獲取本月是哪一月
*
* @return
*/
public static int getNowMonth() {
Date date = new Date();
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return gc.get(2) + 1;
}
/**
* 獲取本月的開始時(shí)間
*
* @return
*/
public static Date getBeginDayOfMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(getNowYear(), getNowMonth() - 1, 1);
return getDayStartTime(calendar.getTime());
}
/**
* 獲取本月的結(jié)束時(shí)間
*
* @return
*/
public static Date getEndDayOfMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(getNowYear(), getNowMonth() - 1, 1);
int day = calendar.getActualMaximum(5);
calendar.set(getNowYear(), getNowMonth() - 1, day);
return getDayEndTime(calendar.getTime());
}
/**
* 獲取上月的開始時(shí)間
*
* @return
*/
public static Date getBeginDayOfLastMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(getNowYear(), getNowMonth() - 2, 1);
return getDayStartTime(calendar.getTime());
}
/**
* 獲取上月的結(jié)束時(shí)間
*
* @return
*/
public static Date getEndDayOfLastMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(getNowYear(), getNowMonth() - 2, 1);
int day = calendar.getActualMaximum(5);
calendar.set(getNowYear(), getNowMonth() - 2, day);
return getDayEndTime(calendar.getTime());
}
/**
* 獲取本年的開始時(shí)間
*
* @return
*/
public static Date getBeginDayOfYear() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, getNowYear());
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DATE, 1);
return getDayStartTime(cal.getTime());
}
/**
* 獲取本年的結(jié)束時(shí)間
*
* @return
*/
public static Date getEndDayOfYear() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, getNowYear());
cal.set(Calendar.MONTH, Calendar.DECEMBER);
cal.set(Calendar.DATE, 31);
return getDayEndTime(cal.getTime());
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springMVC獲取請(qǐng)求參數(shù)的幾種方式匯總
在日常使用SpringMVC進(jìn)行開發(fā)的時(shí)候,有可能遇到前端各種類型的請(qǐng)求參數(shù),這里做一次相對(duì)全面的總結(jié),下面這篇文章主要給大家介紹了關(guān)于springMVC獲取請(qǐng)求參數(shù)的幾種方式,需要的朋友可以參考下2022-04-04
Java中String類getBytes()方法詳解與完整實(shí)例
這篇文章主要給大家介紹了關(guān)于Java中String類getBytes()方法詳解與完整實(shí)例的相關(guān)資料,getBytes()是Java編程語(yǔ)言中將一個(gè)字符串轉(zhuǎn)化為一個(gè)字節(jié)數(shù)組byte[]的方法,需要的朋友可以參考下2023-10-10
java.net.ConnectException異常的正確解決方法(親測(cè)有效!)
java.net.ConnectException異常是與網(wǎng)絡(luò)相關(guān)的最常見的Java異常之一,建立從客戶端應(yīng)用程序到服務(wù)器的TCP連接時(shí),我們可能會(huì)遇到它,這篇文章主要給大家介紹了關(guān)于java.net.ConnectException異常的正確解決方法,需要的朋友可以參考下2024-01-01
SpringBoot中排查內(nèi)存泄漏的方法小結(jié)
內(nèi)存泄漏是項(xiàng)目開發(fā)中常見且棘手的問(wèn)題,它會(huì)導(dǎo)致應(yīng)用性能下降、響應(yīng)變慢,嚴(yán)重時(shí)甚至?xí)l(fā)OutOfMemoryError異常導(dǎo)致應(yīng)用崩潰,下面我們就來(lái)看看SpringBoot排查內(nèi)存泄漏的常用方法吧2025-06-06
Web容器啟動(dòng)過(guò)程中如何執(zhí)行Java類
這篇文章主要介紹了Web容器啟動(dòng)過(guò)程中如何執(zhí)行Java類,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
淺析java中String類型中“==”與“equal”的區(qū)別
這篇文章主要介紹了淺析java中String類型中“==”與“equal”的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08

