网站首页 > java教程 正文
项目开发中,日期时间的处理是最常用的,比如在数据库中,我们设定了新闻的发布时间,这个发布时间是以日期+时间(通常是datetime类型字段)的形式存储的,而我们在前台展示的时候只需要日期,所以我们需要对发布时间进行格式化,以“yyyy-MM-dd”的格式显示在前台。而日期格式化在很多地方都会用到,因此我们将它作为一个工具类来处理,提高代码的重用性。接下来我们就封装当前项目中用到的日期处理。
我们首先对日期格式化设定默认的规则:
//默认的日期格式化规则 private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd"; //默认的日期时间格式化规则 private static final String DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
根据给定的日期时间规则转换成字符串
什么时候需要将日期转换为字符串呢?比如我们查询单个新闻,在返回给前端数据的时候,我们需要对发布时间进行格式化,我们只需要它的日期时间,并不需要知道它的具体发布时间是几秒钟,因此,我们需要对日期进行格式化,将其格式化为“yyyy-MM-dd HH:mm”。而在工具类中,我们需要提供一个转换方法。

/**
* 根据给定的日期时间规则转换成字符串
* @param date 需要转换的日期
* @param pattern 以该规则转成字符串
* @return
*/
public static String dateToStr(Date date, String pattern) {
//若规则为空,则以默认的规则显示
if(pattern.isEmpty()) {
pattern = DEFAULT_DATE_PATTERN;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
将给定的日期字符串解析成日期对象
我们需要查询指定日期的数据时,前端给出的查询日期为字符串格式,这时我们需要将其解析成日期对象,这样才能在数据库中获取到数据。
/**
* 将指定字符串解析成时间对象
* @param dateStr 时间字符串
* @param pattern 解析规则
* @return
* @throws ParseException
*/
public static Date strToDate(String dateStr, String pattern) throws ParseException {
if(pattern.isEmpty()) {
pattern = DEFAULT_DATE_PATTERN;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.parse(dateStr);
}
获取指定时间的前后时间
目前大多数的数据分析都会以今天、昨天、七天、十五天等为基准来进行分析,而获取当前时间的前一天或前几天数据需要对日期时间进行处理。
/**
* 获取指定时间的前后时间
* @param date 指定时间
* @param num 负数为指定时间之前几天,正数为指定时间之后几天
* @return
*/
public static Date beforeOrAfterOfDate(Date date, int num) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, num);
return calendar.getTime();
}
获取指定日期月份开始时间和月份结束时间
我们需要当前月份的数据时,需要查询从月份开始时间到月份结束时间。比如查询上月的发文数量、新注册用户等等。
/**
* 获取指定日期所在月份的开始日期
* @param date
* @return
*/
public static Date getBeginDateOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date); //设置本月第一天,1号
calendar.set(Calendar.DAY_OF_MONTH, 1); //设置小时,0
calendar.set(Calendar.HOUR_OF_DAY, 0); //设置分钟,0
calendar.set(Calendar.MINUTE, 0); //设置秒,0
calendar.set(Calendar.SECOND, 0); //设置毫秒,0
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 获取指定日期所在月份的结束日期
* @param date
* @return
*/
public static Date getEndDateOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date); //设置本月最后一天
calendar.set(Calendar.DAY_OF_MONTH,
calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); //设置小时,23
calendar.set(Calendar.HOUR_OF_DAY, 23); //设置分钟,59
calendar.set(Calendar.MINUTE, 59); //设置秒,59
calendar.set(Calendar.SECOND, 59); //设置毫秒,999
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
猜你喜欢
- 2024-10-26 一些长时间GC停顿问题的排查及解决办法
- 2024-10-26 真的很实在,程序员如何精确评估开发时间?
- 2024-10-26 「JAVA面试」时间轮你了解吗?(java中的时间类)
- 2024-10-26 java判断当前日期时间大于指定日期时间 记录日常开发中的小搜索
- 2024-10-26 java如何优雅的实现时间控制(java 时间控件)
- 2024-10-26 Java8 新特性:新日期与时间(java 日期操作)
- 2024-10-26 java 和 go 的定时器对比(java定时器和多线程的区别)
- 2024-10-26 Java时间类Date与Calendar的区别与使用
- 2024-10-26 Mysql客户端上,时间为啥和本地差了整整13个小时,就离谱
- 2024-10-26 Java 日期类型比较没有返回正确的结果
欢迎 你 发表评论:
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)

本文暂时没有评论,来添加一个吧(●'◡'●)