import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;public class DateUtils {// 日期格式:yyyy-MM-ddprivate static final String DATE_FORMAT = "yyyy-MM-dd";// 日期时间格式:yyyy-MM-dd HH:mm:ssprivate static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";// 默认日期格式化对象private static final SimpleDateFormat dateFormatter = new SimpleDateFormat(DATE_FORMAT, Locale.getDefault());// 默认日期时间格式化对象private static final SimpleDateFormat dateTimeFormatter = new SimpleDateFormat(DATETIME_FORMAT, Locale.getDefault());static {// 设置默认时区为系统默认dateFormatter.setTimeZone(TimeZone.getDefault());dateTimeFormatter.setTimeZone(TimeZone.getDefault());}/*** 获取当前日期的字符串表示,格式为 yyyy-MM-dd* @return 当前日期的字符串表示*/public static String getCurrentDateString() {return dateFormatter.format(new Date());}/*** 获取当前日期时间的字符串表示,格式为 yyyy-MM-dd HH:mm:ss* @return 当前日期时间的字符串表示*/public static String getCurrentDateTimeString() {return dateTimeFormatter.format(new Date());}/*** 将字符串转换为日期对象,格式为 yyyy-MM-dd* @param dateString 日期字符串* @return 对应的日期对象* @throws ParseException 如果解析日期字符串失败*/public static Date parseDate(String dateString) throws ParseException {return dateFormatter.parse(dateString);}/*** 将字符串转换为日期时间对象,格式为 yyyy-MM-dd HH:mm:ss* @param dateTimeString 日期时间字符串* @return 对应的日期时间对象* @throws ParseException 如果解析日期时间字符串失败*/public static Date parseDateTime(String dateTimeString) throws ParseException {return dateTimeFormatter.parse(dateTimeString);}/*** 获取当前时间的毫秒值* @return 当前时间的毫秒值*/public static long getCurrentTimeInMillis() {return System.currentTimeMillis();}/*** 根据日期计算日期差值(以天为单位)* @param startDate 开始日期* @param endDate 结束日期* @return 日期差值(以天为单位)*/public static long daysBetween(Date startDate, Date endDate) {long diffInMillis = endDate.getTime() - startDate.getTime();return diffInMillis / (1000 * 60 * 60 * 24);}/*** 获取某个月的第一天* @param year 年份* @param month 月份(1-12)* @return 该月份的第一天*/public static Date getFirstDayOfMonth(int year, int month) {Calendar calendar = Calendar.getInstance();calendar.set(year, month - 1, 1, 0, 0, 0);calendar.set(Calendar.MILLISECOND, 0);return calendar.getTime();}/*** 获取某个月的最后一天* @param year 年份* @param month 月份(1-12)* @return 该月份的最后一天*/public static Date getLastDayOfMonth(int year, int month) {Calendar calendar = Calendar.getInstance();calendar.set(year, month - 1, 1);calendar.add(Calendar.MONTH, 1);calendar.add(Calendar.DAY_OF_MONTH, -1);calendar.set(Calendar.HOUR_OF_DAY, 23);calendar.set(Calendar.MINUTE, 59);calendar.set(Calendar.SECOND, 59);calendar.set(Calendar.MILLISECOND, 0);return calendar.getTime();}/*** 添加指定天数到某个日期* @param date 原始日期* @param days 要添加的天数* @return 新的日期*/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();}/*** 获取两个日期之间的差异(以秒为单位)* @param startDate 开始日期* @param endDate 结束日期* @return 日期差异(以秒为单位)*/public static long secondsBetween(Date startDate, Date endDate) {long diffInMillis = endDate.getTime() - startDate.getTime();return diffInMillis / 1000;}
}
说明:
-
日期格式和时间格式:
- 使用
SimpleDateFormat
进行日期和时间的格式化和解析。 DATE_FORMAT
和DATETIME_FORMAT
定义了日期和日期时间的格式。
- 使用
-
常用方法:
getCurrentDateString()
和getCurrentDateTimeString()
:获取当前日期和时间的字符串表示。parseDate()
和parseDateTime()
:将字符串解析为Date
对象。getCurrentTimeInMillis()
:获取当前时间的毫秒值。daysBetween()
:计算两个日期之间的天数。getFirstDayOfMonth()
和getLastDayOfMonth()
:获取某个月的第一天和最后一天。addDays()
:在某个日期上添加指定的天数。secondsBetween()
:计算两个日期之间的秒数。