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-dd
private static final String DATE_FORMAT = "yyyy-MM-dd";
// 日期时间格式:yyyy-MM-dd HH:mm:ss
private 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()
:计算两个日期之间的秒数。