日期工具类处理总结(全)

文章目录

    • 前言
    • 代码展示

前言

最近项目中用到了一些关于日期类和字符串类的处理,用到一次就得去写一次,后来想了想这样不光效率低还浪费时间浪费精力,于是就将常用的一些方法提取成工具类,每个项目都考进去一次,用的时候直接调用即可。

下面我来分享一下我自己整理的一些工具方法:

代码展示

👉将时间戳转换成具体的年月日时分秒

在和安卓端交互时,处理时间的时候,一般都是以时间戳的方式进行互相传输,但是在PC端的时候,往往直接处理日期类型的数据比较方便,数据库中也是存的datetime格式的数据,于是我就写了个将时间戳转换成具体的时间,代码如下:

	/*** 将毫秒转换成时间*//*** 根据时间戳获取时间*/public static String getTimeChuo(Long time) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//将时间戳转换为时间Date date = new Date(time);return format.format(date);}

🤞输入:1657335494926
✌输出:2022-07-09 10:58:14

👉计算两个日期之间相差的天数
有时候我们有这样的场景,需要知道一下开始日期和结束日期之间相差多少天,多少小时,多少分等,于是我就写了个计算两个日期之间相差的详细时间,代码如下:

	/*** @param stratTime* @param endTime* @return 计算两个日期之间相差的天数*/public static Map<String, Object> dateDiff(Long stratTime, Long endTime) {Map<String, Object> map = new HashMap<>();Long diff = endTime - stratTime;Long day = diff / (24 * 60 * 60 * 1000);Long hour = (diff / (60 * 60 * 1000) - day * 24);Long min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);Long sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);map.put("day", day);map.put("hour", hour);map.put("min", min);map.put("sec", sec);return map;}

🤞输入:1656151439784L,1657335494926L
✌输出:{sec=15, min=54, hour=16, day=13},是一个Map结合

👉获取当前24小时的时间前后时间戳
比如现在是:2022年7月9日11:14:22,有些业务场景下,我们需要获取当前时间的前后24的时间,也就是昨天的这个时间和明天的这个时间,于是我就写了个工具方法,代码如下:

	/*** 获取当前24小时的时间前后时间戳*/public static Map<String, Object> getTimeChuo() {Map<String, Object> map = new HashMap<>();Long nowTime = System.currentTimeMillis();Long startTime = nowTime - 24 * 60 * 60 * 1000;Long endTime = nowTime + 24 * 60 * 60 * 1000;map.put("startTime", startTime);map.put("endTime", endTime);return map;}

🤞输入:无需参数
✌输出:{startTime=1657250129070, endTime=1657422929070},转化成日期就是:2022年7月8日11:14:22和2022年7月10日11:14:22

👉根据出生日期获得年龄
系统中的年龄你能直接写死吗,倒也可以,但是你明年得手动的再给人家加1岁。。。后年再加一岁。。。。。这不是个完全之策,于是我就写了个根据出生日期计算年龄的工具方法,代码如下:

	public static int getAge(Date birthDay) throws Exception {Calendar cal = Calendar.getInstance();if (cal.before(birthDay)) {throw new IllegalArgumentException("出生日期小于当前时间,无效的日期!");}int yearNow = cal.get(Calendar.YEAR);int monthNow = cal.get(Calendar.MONTH);int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);cal.setTime(birthDay);int yearBirth = cal.get(Calendar.YEAR);int monthBirth = cal.get(Calendar.MONTH);int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);int age = yearNow - yearBirth;if (monthNow <= monthBirth) {if (monthNow == monthBirth) {if (dayOfMonthNow < dayOfMonthBirth) age--;} else {age--;}}return age;}	

🤞输入:new SimpleDateFormat("yyyy-MM-dd").parse("1998-09-08")
✌输出:23

👉统计两个日期之间的所有日期
比如有这样的场景,给某个人制定了个训练计划,这个计划从7月1日到7月7日,一周的减肥增肌方案。数据库存的话,只存了开始时间7月1日和结束时间7月7日。但是有个问题,你说这个人在7月5日有没有训练计划,7月6日有没有?当然有,于是我就写了个工具方法,代码如下:

	/*** 统计两个日期之间的所有日期*/public static List<String> getBeginTimeAndEndTime(Date beginTime, Date endTime) {List<String> listDate = new ArrayList<>();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");try {Calendar calendar = Calendar.getInstance();calendar.setTime(beginTime);while (calendar.getTime().before(endTime) || calendar.getTime().equals(endTime)) {listDate.add(dateFormat.format(calendar.getTime()));calendar.add(Calendar.DAY_OF_MONTH, 1);}return listDate;} catch (Exception e) {e.printStackTrace();}return listDate;}

🤞输入:new SimpleDateFormat("yyyy-MM-dd").parse("2022-7-1"),new SimpleDateFormat("yyyy-MM-dd").parse("2022-7-8")
✌输出:
2022-07-01
2022-07-02
2022-07-03
2022-07-04
2022-07-05
2022-07-06
2022-07-07
2022-07-08

👉格式化日期:00:00点开始到23:59
将某个日期格式化成0时0分到23时59分,于是我就写了个工具方法,代码如下:

	/*** 格式化日期:00:00点开始到23:59*/public static List<Date> formatDayDateStratToEnd(String date){List<Date> dateList  = new ArrayList<Date>();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar c = Calendar.getInstance();try {c.setTime(simpleDateFormat.parse(date+" 00:00:00"));} catch (ParseException e) {e.printStackTrace();}if(date!=null){c.set(Calendar.HOUR_OF_DAY, 0);c.set(Calendar.MINUTE, 0);c.set(Calendar.SECOND, 0);c.set(Calendar.MILLISECOND, 0);dateList.add(c.getTime());c.set(Calendar.HOUR_OF_DAY, 23);c.set(Calendar.MINUTE, 59);c.set(Calendar.SECOND, 59);c.set(Calendar.MILLISECOND, 0);dateList.add(c.getTime());}return dateList;}

🤞输入:2022-07-01
✌输出:
Fri Jul 01 00:00:00 CST 2022
Fri Jul 01 23:59:59 CST 2022
当然这个日期你也可以自己格式化一下,格式化成需要的格式。

👉获取年月日,并且拼接起来 分隔符
某些情况下,我们的接口有这样的功能,根据指定的年月日查询信息,如果前台没有传年月日,那么我们就获取当前年与日进行查询,于是我就写了个工具方法,代码如下:

	/*** 获取年月日,并且拼接起来  分隔符*/public static String getDateYearAndMonthAndDay(String year,String month,String day,String separator) {//分隔符如果是空的话,则是-separator = Strings.isBlank(separator) ? "-" : separator;//如果年月日不传的话,获取当前的年月日StringBuilder currDate = new StringBuilder();Calendar date = Calendar.getInstance();year = Strings.isBlank(year) ? date.get(Calendar.YEAR) + "" : year;month = Strings.isBlank(month) ? date.get(Calendar.MONTH) + 1 + "" : month;day = Strings.isBlank(day) ? date.get(Calendar.DAY_OF_MONTH) + "" : day;int m = Integer.parseInt(month);int d = Integer.parseInt(day);month = m < 10 ? "0" + m : m + "";day = d < 10 ? "0" + d : d + "";currDate.append(year).append(separator).append(month).append(separator).append(day);return currDate.toString();}

🤞输入:null,null,null,null
✌输出:2022-07-09

或者:“2022”,null,null,“/”
✌输出:2022/07/09

最后一个参数是年月日之间的分隔符,前面的三个参数分别是年月日,可以选择性的传递

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core 2.0 web api基于JWT自定义策略授权

JWT(json web token)是一种基于json的身份验证机制&#xff0c;流程如下&#xff1a; 通过登录&#xff0c;来获取Token&#xff0c;再在之后每次请求的Header中追加Authorization为Token的凭据&#xff0c;服务端验证通过即可能获取想要访问的资源。关于JWT的技术&#xff0c;…

P3811-[模板]乘法逆元【线性求逆元】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP3811 题目大意 求1∼n1\sim n1∼n中modpmod\ \ pmod p的逆元。 解题思路 首先对于p&#xff0c;我们将其分解为kir(k⌊pi⌋,rp%r)kir(k\lfloor \frac{p}{i}\rfloor,rp\%r)kir(k⌊ip​⌋,rp%r)&…

BATJ面试必会|Jvm 虚拟机篇

转载自 BATJ面试必会|Jvm 虚拟机篇 目录 一、运行时数据区域 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 二、垃圾收集 判断一个对象是否可被回收 引用类型 垃圾收集算法 垃圾收集器 三、内存分配与回收策略 Minor GC 和 Full GC 内存…

让网页背景颜色改变

如何改变背景的颜色呢&#xff0c;这里提供一个方法 <!DOCTYPE html> <html><head><style type"text/css">body {background-color: red}p {margin-left: 1px}</style><title>我yi癫狂</title></head><body>…

nssl1141,jzoj3470-最短路【SPFA,暴力】

正题 纪中题目链接:https://jzoj.net/senior/#main/show/3470 题目大意 在从起点经过k个标记点然后到终点的最短路。 解题思路 用SPFA求出起点和所有标记点的最短路&#xff0c;然后暴力枚举标记点到达顺序。 时间负责度:O(K(NM)k!)O(K(NM)k!)O(K(NM)k!) code #include<…

糊涂工具类真是场景下请求http接口的案例

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 现在是&#xff1a;2022年7月7日13:46:07 前言 今天有个这样的需求&#xff0c;PC端需要查看一下哪些天有数据&#xff0c;但是哪些有有没有数据我这边还看不出来&#xff0c;得请求别的系…

Java进阶学习路线

1、JVM &#xff08;1&#xff09;启动参数 1)heap -Xms<size> -Xmx<size> a.young and old generation -Xmn<size> -XX:NewSize<size> -XX:MaxNewSize<size> -XX:NewRatio<rate> -XX:SurvivorRatio<rate> -XX:MaxTenuri…

nssl1142,jzoj3487-剑与魔法【堆,贪心】

正题 纪中题目链接:https://jzoj.net/senior/#main/show/3487 题目大意 有两个东西 一个是表示可以选择这个东西&#xff0c;然后加x的价值。 一个是在这个操作之前不可以超过x个东西。 求最大价值 解题思路 我们考虑每个不能超过的操作&#xff0c;我们留下价值最大的。…

体验 ASP.NET Core 中的多语言支持(Localization)

首先在 Startup 的 ConfigureServices 中添加 AddLocalization 与 AddViewLocalization 以及配置 RequestLocalizationOptions &#xff08;这里假设使用英文与中文&#xff09;&#xff1a; public void ConfigureServices(IServiceCollection services) { services.AddLoca…

java中复杂业务情况下的集合操作(增减集合同步数据)

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 现在是&#xff1a;2022年7月5日16:14:28 前言 今天分享个案例&#xff0c;需求是这样的&#xff1a;一个团组中是可以包含多个会员&#xff0c;在给团组创建训练方案时&#xff0c;本质上…

springboot整合spring @Cache和Redis

转载自 springboot整合spring Cache和Redis spring基于注解的缓存 对于缓存声明&#xff0c;spring的缓存提供了一组java注解: Cacheable:触发缓存写入。CacheEvict:触发缓存清除。CachePut:更新缓存(不会影响到方法的运行)。Caching:重新组合要应用于方法的多个缓存操作。…

段落分开

分三段 <!DOCTYPE html> <html><head></head><body><p>This is a paragraph.</p> <p>This is another paragraph.</p> <p>这是网页设计中定义段落的标记&#xff0c;称为开始标记&#xff0c;称为结束标记。把一…

辞旧迎新,新工作感悟!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 现在是&#xff1a;2022年6月21日22:33:34 公众号又好久没有更新啦。从以前的日更&#xff0c;到后来的周更&#xff0c;再到后来的月更……不知道会不会到不更的结局。。。 最近换工作了…

ASPNET Core 2.x中的Kestrel服务器

Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器&#xff0c;libuv是一个跨平台的异步I/O库。ASP.NET Core模板项目使用Kestrel作为默认的web服务器。 Kestrel支持以下功能&#xff1a; HTTPS用于启用不透明升级的WebSockets位于Nginx之后的高性能Unix sockets Kestr…

全文搜索!收藏这篇Solr ElasticSearch 长文就可以搞定

转载自 全文搜索&#xff01;收藏这篇Solr ElasticSearch 长文就可以搞定 摘自&#xff1a;JaJian博кē Java后端技术编者说&#xff1a;文章从浅到深&#xff0c;描述了什么是全文搜索&#xff0c;为什么要使用全文搜索&#xff0c;Solr和ElasticSearch的发展和比较。文章比…

nssl1143,jzoj3493-三角形【排序,数学,几何】

正题 纪中题目链接:https://jzoj.net/senior/#main/show/3493 题目大意 给n点&#xff0c;求有多少个三角形。 ##解题思路 我们考虑在n个点中选取3个点的方案数&#xff0c;Cn3C_n^3Cn3​。然后不能组成三角形的情况只有3点共线。利用容斥原理我们可以用方案数减去不合法的方…

网页弹框弹出

完成这个功能需要在 弹框弹出 点击之后 才会显示内容 <!DOCTYPE html> <html><head><title>对话框测试</title><script>alert("对话框测试");</script></head><body>对话框测试&#xff1a;</body> …

字符串工具类总结(全)

文章目录前言代码展示大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 现在是&#xff1a;2022年7月9日18:53:37 前言 最近在项目过程中整理了一些常用的方法&#xff0c;于是将其抽出来形成一个工具类。 下面我来分享一下我自己整理的一…

Azure School与开源

距离Azure School(https://school.azure.cn/) 的正式上线时间&#xff0c;2017.8.3&#xff0c;已经过去了20多天了。这20多天得到了很多有帮助的建议和反馈&#xff0c;小伙伴们都很给力&#xff0c;互相帮助扶持&#xff0c;调整产品不正确的地方&#xff0c;快速迭代新的功能…

ssl提高组周六模拟赛【2018.9.8】

前言 开学后&#xff0c;新学年新气象&#xff0c;学校题库也迎来了新的改动&#xff0c;界面大改变&#xff0c;也可以比赛了。 所以这周就有比赛了&#xff0c;而在纪中被虐习惯后回来渴望继续被虐就来参加提高组模拟赛&#xff08;反正今年也参加提高组&#xff09; 成绩 …