package com.leng.demo.utils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
/*
* DateUtils:用于处理日期时间相关操作,例如日期格式化、日期计算等。
* */
public final class DateUtils {
private DateUtils() {
}
/**
* 将日期按指定格式转换为字符串
*
* @param date 日期对象
* @param format 格式字符串
* @return 返回格式化后的字符串
*/
public static String format(Date date, String format) {
// SimpleDateFormat不是线程安全的,局部变量避免并发问题
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
/**
* 计算指定日期加上指定天数后的日期
*
* @param date 要计算的日期
* @param days 要加上的天数(正数表示加,负数表示减)
* @return 返回计算后的日期对象
*/
public static Date addDays(Date date, int days) {
if (days == 0) {
return date;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, days);
return calendar.getTime();
}
/**
* 计算两个日期相差的天数
*
* @param start 开始日期
* @param end 结束日期
* @return 返回相差天数(可能为负数)
*/
public static int diffDays(Date start, Date end) {
// 注意时区问题,先将日期转换为UTC时间戳再计算
long diff = convertToUTC(end, "GMT+8") - convertToUTC(start, "GMT+8");
return (int) (diff / (24 * 60 * 60 * 1000));
}
/**
* 计算指定日期加上指定小时数后的日期
*
* @param date 要计算的日期
* @param hours 要加上的小时数(正数表示加,负数表示减)
* @return 返回计算后的日期对象
*/
public static Date addHours(Date date, int hours) {
if (hours == 0) {
return date;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, hours);
return calendar.getTime();
}
/**
* 获取当前季度
*
* @return 返回1、2、3或4表示第一季度、第二季度、第三季度或第四季度
*/
public static int getCurrentQuarter() {
Calendar calendar = Calendar.getInstance();
int month = calendar.get(Calendar.MONTH);
if (month < 3) {
return 1;
} else if (month < 6) {
return 2;
} else if (month < 9) {
return 3;
} else {
return 4;
}
}
/**
* 计算指定日期的年龄
*
* @param birthDate 出生日期
* @return 返回年龄
*/
public static int getAge(Date birthDate) {
Calendar curCalendar = Calendar.getInstance();
Calendar birthCalendar = Calendar.getInstance();
birthCalendar.setTime(birthDate);
int age = curCalendar.get(Calendar.YEAR) - birthCalendar.get(Calendar.YEAR);
if (curCalendar.get(Calendar.MONTH) < birthCalendar.get(Calendar.MONTH)
|| (curCalendar.get(Calendar.MONTH) == birthCalendar.get(Calendar.MONTH)
&& curCalendar.get(Calendar.DAY_OF_MONTH) < birthCalendar.get(Calendar.DAY_OF_MONTH))) {
age--;
}
return age;
}
/**
* 将日期按指定时区转换为UTC标准时间
*
* @param date 要转换的日期对象
* @param zoneId 时区ID字符串(例如"GMT+8")
* @return 返回转换后的UTC时间戳
*/
public static long convertToUTC(Date date, String zoneId) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 获取指定时区与UTC的偏移量
int offset = TimeZone.getTimeZone(zoneId).getRawOffset();
// 计算指定时间在UTC表示下的时间戳并返回
return calendar.getTimeInMillis() - offset;
}
/**
* 将UTC标准时间转换为指定时区的日期对象
*
* @param utcTime UTC时间戳
* @param zoneId 时区ID字符串(例如"GMT+8")
* @return 返回转换后的日期对象
*/
public static Date convertToLocalDate(long utcTime, String zoneId) {
Calendar calendar = Calendar.getInstance();
// 计算指定UTC时间在指定时区下的时间戳
calendar.setTimeInMillis(utcTime + TimeZone.getTimeZone(zoneId).getRawOffset());
return calendar.getTime();
}
}
java日期工具类(用于处理日期时间相关操作,例如日期格式化、日期计算等。)
最新推荐文章于 2023-06-10 11:53:51 发布