本文目录导读:

我来为您提供几个常用的DateUtils工具类案例,涵盖日期处理的各种常见场景。
基础日期工具类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class DateUtils {
private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
private static final String DATE_PATTERN = "yyyy-MM-dd";
private static final String TIME_PATTERN = "HH:mm:ss";
/**
* 格式化日期
*/
public static String format(Date date) {
return format(date, DEFAULT_PATTERN);
}
public static String format(Date date, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
/**
* 字符串转日期
*/
public static Date parse(String dateStr) throws ParseException {
return parse(dateStr, DEFAULT_PATTERN);
}
public static Date parse(String dateStr, String pattern) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.parse(dateStr);
}
/**
* 获取当前时间字符串
*/
public static String getNow() {
return format(new Date());
}
/**
* 获取今天的开始时间(00:00:00)
*/
public static Date getStartOfDay() {
return getStartOfDay(new Date());
}
public static Date getStartOfDay(Date 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);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 获取今天的结束时间(23:59:59)
*/
public static Date getEndOfDay() {
return getEndOfDay(new Date());
}
public static Date getEndOfDay(Date 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);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 日期加减天数
*/
public static Date addDays(Date date, int days) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, days);
return calendar.getTime();
}
/**
* 日期加减月数
*/
public static Date addMonths(Date date, int months) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, months);
return calendar.getTime();
}
/**
* 日期加减年数
*/
public static Date addYears(Date date, int years) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, years);
return calendar.getTime();
}
/**
* 计算两个日期之间的天数差
*/
public static long daysBetween(Date startDate, Date endDate) {
long start = getStartOfDay(startDate).getTime();
long end = getStartOfDay(endDate).getTime();
return (end - start) / (1000 * 60 * 60 * 24);
}
/**
* 判断是否同一天
*/
public static boolean isSameDay(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR)
&& cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR);
}
/**
* 获取本周第一天(周一)
*/
public static Date getFirstDayOfWeek() {
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return getStartOfDay(calendar.getTime());
}
/**
* 获取本月第一天
*/
public static Date getFirstDayOfMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
return getStartOfDay(calendar.getTime());
}
/**
* 获取下个月的当前月份第一天的上一天(本月最后一天)
*/
public static Date getLastDayOfMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH,
calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return getEndOfDay(calendar.getTime());
}
/**
* 获取上周日期
*/
public static Date getLastWeekDate(Date date) {
return addDays(date, -7);
}
/**
* 获取明天
*/
public static Date getTomorrow() {
return addDays(new Date(), 1);
}
/**
* 获取昨天
*/
public static Date getYesterday() {
return addDays(new Date(), -1);
}
}
高级日期工具类(Java 8+)
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
public class DateUtils8 {
private static final DateTimeFormatter DEFAULT_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static final DateTimeFormatter DATE_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd");
// LocalDate 相关方法
public static String formatLocalDate(LocalDate date) {
return date.format(DATE_FORMATTER);
}
// LocalDateTime 相关方法
public static String formatLocalDateTime(LocalDateTime dateTime) {
return dateTime.format(DEFAULT_FORMATTER);
}
// 字符串转LocalDate
public static LocalDate parseToLocalDate(String dateStr) {
return LocalDate.parse(dateStr, DATE_FORMATTER);
}
// 获取当前日期
public static LocalDate getToday() {
return LocalDate.now();
}
// 获取当前时间
public static LocalDateTime getNow() {
return LocalDateTime.now();
}
// 日期加减
public static LocalDate plusDays(LocalDate date, long days) {
return date.plusDays(days);
}
public static LocalDate minusDays(LocalDate date, long days) {
return date.minusDays(days);
}
// 获取当月的第一天
public static LocalDate getFirstDayOfMonth(LocalDate date) {
return date.with(TemporalAdjusters.firstDayOfMonth());
}
// 获取当月的最后一天
public static LocalDate getLastDayOfMonth(LocalDate date) {
return date.with(TemporalAdjusters.lastDayOfMonth());
}
// 计算两个日期之间的天数
public static long daysBetween(LocalDate startDate, LocalDate endDate) {
return ChronoUnit.DAYS.between(startDate, endDate);
}
// 获取季节
public static String getSeason(LocalDate date) {
int month = date.getMonthValue();
if (month >= 3 && month <= 5) return "春季";
if (month >= 6 && month <= 8) return "夏季";
if (month >= 9 && month <= 11) return "秋季";
return "冬季";
}
// 判断是否是闰年
public static boolean isLeapYear(LocalDate date) {
return date.isLeapYear();
}
// 获取年龄
public static int getAge(LocalDate birthDate) {
return Period.between(birthDate, LocalDate.now()).getYears();
}
// 获取工作日的上一个工作日
public static LocalDate getPreviousWorkday(LocalDate date) {
LocalDate result = date.minusDays(1);
while (result.getDayOfWeek() == DayOfWeek.SATURDAY ||
result.getDayOfWeek() == DayOfWeek.SUNDAY) {
result = result.minusDays(1);
}
return result;
}
// 获取下一个工作日
public static LocalDate getNextWorkday(LocalDate date) {
LocalDate result = date.plusDays(1);
while (result.getDayOfWeek() == DayOfWeek.SATURDAY ||
result.getDayOfWeek() == DayOfWeek.SUNDAY) {
result = result.plusDays(1);
}
return result;
}
// 获取某个月份有多少天
public static int getDaysInMonth(int year, int month) {
return YearMonth.of(year, month).lengthOfMonth();
}
// 时间戳转LocalDateTime
public static LocalDateTime timestampToLocalDateTime(long timestamp) {
return LocalDateTime.ofInstant(
Instant.ofEpochMilli(timestamp), ZoneId.systemDefault()
);
}
// LocalDateTime转时间戳
public static long localDateTimeToTimestamp(LocalDateTime dateTime) {
return dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
// 获取两个日期之间的所有日期
public static List<LocalDate> getDatesBetween(LocalDate startDate, LocalDate endDate) {
List<LocalDate> dates = new ArrayList<>();
LocalDate current = startDate;
while (!current.isAfter(endDate)) {
dates.add(current);
current = current.plusDays(1);
}
return dates;
}
}
使用示例
public class DateUtilsDemo {
public static void main(String[] args) throws ParseException {
// 使用传统DateUtil
System.out.println("=== 传统工具类使用 ===");
Date now = new Date();
// 格式化日期
System.out.println("当前时间: " + DateUtils.format(now));
System.out.println("日期格式: " + DateUtils.format(now, "yyyy年MM月dd日"));
// 日期加减
Date tomorrow = DateUtils.addDays(now, 1);
System.out.println("明天: " + DateUtils.format(tomorrow));
Date lastMonth = DateUtils.addMonths(now, -1);
System.out.println("上个月: " + DateUtils.format(lastMonth));
// 计算天数差
Date startDate = DateUtils.parse("2024-01-01", "yyyy-MM-dd");
long days = DateUtils.daysBetween(startDate, now);
System.out.println("从2024年1月1日到今天已过: " + days + "天");
// 今天是周几
Calendar cal = Calendar.getInstance();
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
String[] weekDays = {"", "周日", "周一", "周二", "周三", "周四", "周五", "周六"};
System.out.println("今天是: " + weekDays[dayOfWeek]);
// 使用Java 8日期工具类
System.out.println("\n=== Java 8工具类使用 ===");
LocalDate today = LocalDate.now();
System.out.println(" " + DateUtils8.formatLocalDate(today));
System.out.println("当前时间: " + DateUtils8.formatLocalDateTime(LocalDateTime.now()));
// 获取年龄
LocalDate birthDate = LocalDate.of(2000, 1, 15);
System.out.println("年龄: " + DateUtils8.getAge(birthDate) + "岁");
// 获取季节
System.out.println("当前季节: " + DateUtils8.getSeason(today));
// 获取当前月份天数
int daysInMonth = DateUtils8.getDaysInMonth(today.getYear(), today.getMonthValue());
System.out.println("本月有: " + daysInMonth + "天");
// 获取最近的日期
System.out.println("昨天: " + DateUtils8.minusDays(today, 1));
System.out.println("明天: " + DateUtils8.plusDays(today, 1));
// 计算两个日期之间的所有日期
LocalDate start = LocalDate.of(2024, 1, 1);
LocalDate end = LocalDate.of(2024, 1, 7);
List<LocalDate> dateList = DateUtils8.getDatesBetween(start, end);
System.out.println("2024年1月1日至1月7日之间的日期:");
dateList.forEach(date -> System.out.println(" " + date));
}
}
实际业务场景案例
// 业务场景:判断是否为工作日(简单版,不含节假日)
public class BusinessDateUtils {
// 判断是否为工作日
public static boolean isWorkday(LocalDate date) {
DayOfWeek dayOfWeek = date.getDayOfWeek();
return dayOfWeek != DayOfWeek.SATURDAY && dayOfWeek != DayOfWeek.SUNDAY;
}
// 计算两个日期之间的工作日数量
public static long countWorkdays(LocalDate startDate, LocalDate endDate) {
long workdays = 0;
LocalDate current = startDate;
while (!current.isAfter(endDate)) {
if (isWorkday(current)) {
workdays++;
}
current = current.plusDays(1);
}
return workdays;
}
// 获取某月的第一个工作日
public static LocalDate getFirstWorkdayOfMonth(LocalDate date) {
LocalDate firstDay = date.withDayOfMonth(1);
while (!isWorkday(firstDay)) {
firstDay = firstDay.plusDays(1);
}
return firstDay;
}
// 计算到期日(排除周末)
public static LocalDate calculateDueDate(LocalDate startDate, int workdays) {
LocalDate dueDate = startDate;
int countedDays = 0;
while (countedDays < workdays) {
dueDate = dueDate.plusDays(1);
if (isWorkday(dueDate)) {
countedDays++;
}
}
return dueDate;
}
}
这些工具类覆盖了日常开发中最常用的日期处理场景,您可以根据实际需求选择使用,如果需要更多特定功能的实现,欢迎继续询问!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播