网站首页 > 技术文章 正文
项目开发中,日期时间的处理是最常用的,比如在数据库中,我们设定了新闻的发布时间,这个发布时间是以日期+时间(通常是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-22 DATE #4、Java操作日期时间-②老版本使用的日期和时间类
- 2024-10-22 JDK1.7和JDK1.8中日期时间使用和处理的不同「Java工程师必读」
- 2024-10-22 浅谈Java8日期时间处理(抗美援朝战争时间的起止日期)
- 2024-10-22 玩转MySQL的时间类型:Date、DateTime、TimeStamp、Time
- 2024-10-22 Java8日期时间类使用详解,干货满满,不容错过哦
- 2024-10-22 java 8 新特性 日期和时间 API(我的世界java版特性)
- 2024-10-22 JAVA时间工具包 - java.time(java中时间)
- 2024-10-22 Java 打印日期/时间格式(java 打印当前时间)
- 2024-10-22 Java时间类Date与Calendar的区别与使用
- 2024-10-22 用python 计算两个日期相差多少个月
- 04-27JavaScript注释:单行注释和多行注释详解
- 04-27贼好用的 Java 工具类库
- 04-27一文搞懂,WAF阻止恶意攻击的8种方法
- 04-27详细教你微信公众号正文页SVG交互开发
- 04-27Cookie 和 Session 到底有什么区别?
- 04-27教你一招,给你的店铺,网站,博客等添加“一键分享”功能
- 04-27按DeepSeek AI的规划,自学开发小程序第7天
- 04-27《JAVASCRIPT高级程序设计》第二章
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)