import java.time.LocalDate;
import java.time.LocalTime;
// 当前时间(LocalDate方法
LocalDate currentLD = LocalDate.now();
System.out.println("当前时间:"+currentLD);
// 获取当前日期的开始时间(凌晨 00:00:00)
LocalDateTime startOfDayLD = currentLD.atStartOfDay();
System.out.println("当前日期的开始时间:"+startOfDayLD);
// 获取当前日期的结束时间(23:59:59.999999999)
LocalDateTime endOfDayLD = currentLD.atTime(LocalTime.MAX);
System.out.println("当前日期的结束时间:"+endOfDayLD);
结果如下:
当前时间:2023-11-29
当前日期的开始时间:2023-11-29T00:00
当前日期的结束时间:2023-11-29T23:59:59.999999999
import java.time.LocalDateTime;
import java.time.LocalTime;
// 当前时间(LocalDateTime方法
LocalDateTime currentLDT = LocalDateTime.now();
System.out.println("当前时间:"+currentLDT);
// 获取当前日期的开始时间(凌晨 00:00:00)
LocalDateTime startOfDayLDT = currentLDT.with(LocalTime.MIN);
System.out.println("当前日期的开始时间:"+startOfDayLDT);
// 获取当前日期的结束时间(23:59:59.999999999)
LocalDateTime endOfDayLDT = currentLDT.with(LocalTime.MAX);
System.out.println("当前日期的结束时间:"+endOfDayLDT);
结果如下:
当前时间:2023-11-29T15:25:44.178
当前日期的开始时间:2023-11-29T00:00
当前日期的结束时间:2023-11-29T23:59:59.999999999
import cn.hutool.core.date.DateTime;
import java.util.Date;
import cn.hutool.core.date.DateUtil;
// 当前时间(Date+DateUtil方法
Date current = new Date();
System.out.println("当前时间:"+current);
// 获取当前日期的开始时间(凌晨 00:00:00)
DateTime beginOfDay = DateUtil.beginOfDay(current);
System.out.println("当前日期的开始时间:"+beginOfDay);
// 获取当前日期的结束时间(23:59:59)
DateTime endOfDay = DateUtil.endOfDay(current);
System.out.println("当前日期的结束时间:"+endOfDay);
结果如下:
当前时间:Wed Nov 29 15:29:10 CST 2023
当前日期的开始时间:2023-11-29 00:00:00
当前日期的结束时间:2023-11-29 23:59:59
import java.util.Date;
/**
* 获取指定日期的开始时间(当天的凌晨)
*
* @param date 输入日期
* @return 开始时间
* @throws IllegalArgumentException 如果日期参数为空
*/
public static Date getBeginOfDay(Date date) {
if (date == null) {
date = new Date();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTime();
}
/**
* 获取指定日期的结束时间(当天的最后一刻)
*
* @param date 输入日期
* @return 结束时间
* @throws IllegalArgumentException 如果日期参数为空
*/
public static Date getEndOfDay(Date date) {
if (date == null) {
date = new Date();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
return calendar.getTime();
}
结果如下:
调用方法:
Date now = new Date();
调用以上两种方法并将 now 传入。
当前时间:Wed Nov 29 15:48:56 CST 2023
当前日期的开始时间:Wed Nov 29 00:00:00 CST 2023
当前日期的结束时间:Wed Nov 29 23:59:59 CST 2023
- `java.util.Date` 类是Java早期用于处理日期和时间的类。它表示特定的瞬间,精确到毫秒。
- 结果类型:`Date`
- 转换方式:可以使用 `toInstant` 方法将 `Date` 转换为 `Instant`,然后进一步转换为 `LocalDateTime` 或其他 `java.time` 类。
Date date = new Date();
Instant instant = date.toInstant();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
- `java.time` 包引入了新的日期和时间API,包括 `LocalDate`、`LocalTime`、`LocalDateTime` 等类。它们提供了更好的不变性和线程安全性。
- 结果类型:`LocalDate`、`LocalTime`、`LocalDateTime`
- 转换方式:可以使用 `atStartOfDay` 方法将 `LocalDate` 转换为 `LocalDateTime`,或者使用 `toLocalDate` 和 `toLocalTime` 方法将 `LocalDateTime` 拆分为 `LocalDate` 和 `LocalTime`。
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
转换:
LocalDateTime dateTimeFromLocalDate = localDate.atStartOfDay();
LocalDate dateFromLocalDateTime = localDateTime.toLocalDate();
LocalTime timeFromLocalDateTime = localDateTime.toLocalTime();
- `SimpleDateFormat` 类用于格式化和解析日期。它允许你定义自定义的日期格式。
- 结果类型:`String`(格式化结果)、`Date`(解析结果)
- 转换方式:使用 `format` 方法将 `Date` 或 `LocalDateTime` 格式化为字符串,使用 `parse` 方法将字符串解析为 `Date`。
// 使用 SimpleDateFormat 格式化 Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String formattedDate = sdf.format(date);
// 使用 SimpleDateFormat 解析字符串日期
Date parsedDate = sdf.parse("2023-01-01 12:00:00");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = "2023-12-08 16:58" + ":00";
String format2 = "2023-12-08 16:58" + ":59";
System.out.println(format1);
System.out.println(format2);
Date parse1 = simpleDateFormat.parse(format1);
Date parse2 = simpleDateFormat.parse(format2);
System.out.println(parse1);
System.out.println(parse2);
结果如下:
2023-12-08 16:58:00
2023-12-08 16:58:59
Fri Dec 08 16:58:00 CST 2023
Fri Dec 08 16:58:59 CST 2023
注意:
如果是yyyy-MM-dd HH:mm
而不是yyyy-MM-dd HH:mm:ss
则秒转换为时间Date时都为00,不管定义或追加的数字为多少,结果都是00秒;并且如果字符串中没有秒(即yyyy-MM-dd HH:mm格式)则无法使用yyyy-MM-dd HH:mm:ss转换为时间,会报错。
public static void main(String[] args) {
DateRange date = getBeginAndEndDateByDays(-1);
System.out.println(date.getStartDate() + " ," + date.getEndDate()); // Sat Jan 13 00:00:00 CST 2024 ,Sat Jan 13 23:59:59 CST 2024}
}
/**
* 获取距离当前时间日期(n天)的开始时间和结束时间
* @param n
* @return
*/
public static DateRange getBeginAndEndDateByDays(int n) {
Calendar calendar = Calendar.getInstance();
// 当 n = 0; 表示当天;当 n = -1; 表示后一天;当 n = 1; 表示前一天;(因为calendar.add(Calendar.DAY_OF_YEAR, -n);为-n)
calendar.add(Calendar.DAY_OF_YEAR, -n);
Date endDate = getEndOfDay(calendar.getTime());
Date startDate = getBeginOfDay(calendar.getTime());
return new DateRange(startDate, endDate);
}
/**
* 获取指定日期的开始时间(当天的凌晨)
*
* @param date 输入日期
* @return 开始时间
* @throws IllegalArgumentException 如果日期参数为空
*/
public static Date getBeginOfDay(Date date) {
if (date == null) {
date = new Date();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTime();
}
/**
* 获取指定日期的结束时间(当天的最后一刻)
*
* @param date 输入日期
* @return 结束时间
* @throws IllegalArgumentException 如果日期参数为空
*/
public static Date getEndOfDay(Date date) {
if (date == null) {
date = new Date();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
return calendar.getTime();
}
public static class DateRange {
private final Date startDate;
private final Date endDate;
public DateRange(Date startDate, Date endDate) {
this.startDate = startDate;
this.endDate = endDate;
}
public Date getStartDate() {
return startDate;
}
public Date getEndDate() {
return endDate;
}
}