Java 对日期的常见操作,示例代码
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
/**
* 工具类:[日期]、[字符串]、[时间]三者的转换工具类 三者的转换是非常常用的,所以定义此工具类。三者的简要说明如下: [日期]:日期对象 [字符串]:指的是日期的字符串表示.
* [时间]:long型的值
*/
public class DateUtils {
/** 日期格式枚举. */
public enum DateFormatter {
// 日期格式枚举
DATE_PATTERN_CHINESE("yyyy年MM月dd日"),
DATE_PATTERN_LINE("yyyy-MM-dd"),
DATE_PATTERN_SLASH("yyyy/MM/dd"),
DATE_PATTERN_DOUBLE_SLASH("yyyy\\MM\\dd"),
DATE_PATTERN_NONE("yyyyMMdd");
// 日期格式化
private transient DateTimeFormatter formatter;
DateFormatter(String pattern) {
this.formatter = DateTimeFormatter.ofPattern(pattern);
}
}
private static Logger logger = LoggerFactory.getLogger(DateUtils.class);
public static final String DATETIMEFORMAT = "yyyyMMddHHmmss";
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final long TIME_OF_MINUTE = 60000L;
public static final long TIME_OF_HOUR = 3600000L;
public static final long TIME_OF_DAY = 86400000L;
/**
* 将[日期]按照给定的[日期格式]转成[字符串].
*
* @param date 日期
* @param format 日期格式
* @return
*/
public static String parseDateToString(Date date, String format) {
if (date == null) {
return null;
}
if (StringUtils.isEmpty(format)) {
format = DATE_TIME_FORMAT;
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
/**
* 将[时间]按照指定的[日期格式]转成[字符串].
*
* @param time 时间
* @param format 日期格式
* @return
*/
public static String parseLongToString(long time, String format) {
SimpleDateFormat mydate = new SimpleDateFormat(format);
return mydate.format(new Date(time));
}
/**
* 将[字符串]按照指定的[日期格式]转成[时间].
*
* @param time 字符串
* @param format 日期格式
* @return
*/
public static long parseStringToLong(String time, String format) {
SimpleDateFormat mydate = new SimpleDateFormat(format);
try {
Date date = mydate.parse(time);
if (date != null) {
return date.getTime();
}
} catch (ParseException e) {
logger.error("Date parse error:", e);
}
return 0;
}
/**
* 将[字符串]按照指定的[日期格式]转成[日期].
*
* @param time 字符串
* @param format 日期格式
* @return
*/
public static Date parseStringToDate(String time, String format) {
SimpleDateFormat mydate = new SimpleDateFormat(format);
try {
Date date = mydate.parse(time);
if (date != null) {
return date;
}
} catch (ParseException e) {
logger.error("Date parse error:", e);
}
return null;
}
/**
* 添加天数.
*
* @param date 日期
* @param amount 增加天数
* @return
*/
public static Date addDay(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, amount);
return calendar.getTime();
}
/**
* 添加天数.
*
* @param date 日期
* @param amount 增加天数
* @return
*/
public static Date addMonth(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, amount);
return calendar.getTime();
}
/**
* 减少分钟数.
*
* @param date 日期
* @param minite 分钟
* @return
*/
public static Date subMinute(Date date, int minite) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MINUTE, minite);
return calendar.getTime();
}
/**
* 减少秒数.
*
* @param date 日期
* @param second 秒
* @return
*/
public static Date addSeconds(Date date, int second) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.SECOND, second);
return calendar.getTime();
}
/**
* 增加小时数.
*
* @param date 日期
* @param amount 增加小时数 往前则为负数
* @return
*/
public static Date addHour(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, amount);
return calendar.getTime();
}
/**
* 获取某天的开始时间.
*
* @param date 日期
*/
public static Date getStartTime(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);
return calendar.getTime();
}
/**
* 获取某天的结束时间.
*
* @param date 日期
*/
public static Date getEndTime(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);
return calendar.getTime();
}
/**
* 根据给定的日期、天数、日期格式化计算出给定日期前XXX天的日期,并返回String类型.
*
* @param localDate 给定的日期
* @param days 天数
* @param dateFormatter 日期格式化
* @return
*/
public static String getMinusLocalDate(
LocalDate localDate, long days, DateFormatter dateFormatter) {
LocalDate resultLocalDate = localDate.minusDays(days);
return dateFormatter.formatter.format(resultLocalDate);
}
/**
* 根据给定的日期、天数、日期格式化计算出给定日期后XXX天的日期,并返回String类型.
*
* @param localDate 给定的日期
* @param days 天数
* @param dateFormatter 日期格式化
* @return
*/
public static String getPlusLocalDate(
LocalDate localDate, long days, DateFormatter dateFormatter) {
LocalDate resultLocalDate = localDate.plusDays(days);
return dateFormatter.formatter.format(resultLocalDate);
}
/**
* 获取当前时间前后XXX天0点的时间戳.
*
* @param day 天数
*/
public static Date getBeforeTime(int day) {
Calendar calendar = Calendar.getInstance();
calendar.set(
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH) - day,
0,
0,
0);
return calendar.getTime();
}
/**
* 时间格式化.
*
* @param date date
* @return
*/
public static String convertDate(Date date, String dateFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
return sdf.format(date);
}
}
下班记得打卡
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】