Java工具类(18)—时间格式化工具类_java时间格式化工具类-程序员宅基地

技术标签: java  java工具类  

Java工具类(18)—时间格式化工具类

时间格式化工具,一秒前,一分钟前,一小时前,昨天,一天前

package com.awifi.cloudnative.container.rbac.user.provider.utils;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
* @Author 张鑫
* @Date 2022/4/20
* @Param 
* @return 
**/
public class dataFormatUtils {
     
   
   
   /**
    * 时间格式化
    *
    * @param date
    * @return
    */
   public static String format(Date date) {
     
       // 计算出相差天数
       int days = differentDays(date, new Date());
       // 同一天
       if (0 == days) {
     
           // 计算出时间差
           long delta = new Date().getTime() - date.getTime();
           // 小于一分钟
           if (delta < 1L * 60000L) {
     
               long seconds = toSeconds(delta);
               return (seconds <= 0 ? 1 : seconds) + "秒前";
           }
           // 小于一小时
           else if (delta < 1L * 3600000L) {
     
               long minutes = toMinutes(delta);
               return (minutes <= 0 ? 1 : minutes) + "分钟前";
           }
           // 小于24小时
           else if (delta < 24L * 3600000L) {
     
               long hours = toHours(delta);
               return (hours <= 0 ? 1 : hours) + "小时前";
           }
       }
       // 不同一天
       else {
     
           if (1 == days) {
     
               return "昨天";
           }
           // 几天前
           else if (3 >= days) {
     
               return days + "天前";
           }
       }
       // 格式化时间
       return getYmdHm(date);
   }

   /**
    * 获取秒
    *
    * @param date
    * @return
    */
   private static long toSeconds(long date) {
     
       return date / 1000L;
   }

   /**
    * 获取分钟
    *
    * @param date
    * @return
    */
   private static long toMinutes(long date) {
     
       return toSeconds(date) / 60L;
   }

   /**
    * 获取小时
    *
    * @param date
    * @return
    */
   private static long toHours(long date) {
     
       return toMinutes(date) / 60L;
   }

   /**
    * 时间格式化,yyyy-MM-dd HH:mm
    */
   public static String getYmdHm(Date date) {
     
       DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
       return df.format(date);
   }

   /**
    * 获取天数
    *
    * @param oldDate
    * @param newDate
    * @return
    */
   public static int differentDays(Date oldDate, Date newDate) {
     
       Calendar oldCal = Calendar.getInstance();
       oldCal.setTime(oldDate);

       Calendar newCal = Calendar.getInstance();
       newCal.setTime(newDate);
       int oldDay = oldCal.get(Calendar.DAY_OF_YEAR);
       int newDay = newCal.get(Calendar.DAY_OF_YEAR);

       int oldYear = oldCal.get(Calendar.YEAR);
       int newYear = newCal.get(Calendar.YEAR);
       // 不是同一年
       if (oldYear != newYear) {
     
           int timeDistance = 0;
           for (int i = oldYear; i < newYear; i++) {
     
               //如果是闰年
               if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
     
                   timeDistance += 366;
               }
               //不是闰年
               else {
     
                   timeDistance += 365;
               }
           }
           return timeDistance + (newDay - oldDay);
       }
       // 是同一年
       else {
     
           return newDay - oldDay;
       }
   }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43410878/article/details/124289880

智能推荐

一文搞定Java中的枚举_java 枚举-程序员宅基地

文章浏览阅读1.1k次,点赞3次,收藏4次。而枚举中定义的枚举常量,变成了相应的 public static final 属性,而且其类型就抽象类的类型,名字就是枚举常量的名字。位向量是一种极为高效的位运算操作,由于直接存储和操作都是 bit,因此 EnumSet 空间和时间性能都十分可观,足以媲美传统上基于 int 的 “位标志” 的运算,关键是我们可像操作 set 集合一般来操作位运算。枚举的主要目的是加强编译时类型的安全性。枚举在日常编码中几乎是必不可少的,如何用好,如何用精,还需要基础知识的铺垫,本文也正是基于此带大家从头到尾梳理了一遍。_java 枚举

dell台式计算机主板电池,怎么更换主板电池 主板电池更换方法【步骤详解】-程序员宅基地

文章浏览阅读1.1w次。我门知道主板是电脑配件的核心之一。那么主板电池也是非常重要的存在。有人问主板电池有什么用?其实主板电池是记录计算机系统的时间和维持CMOS的BIOS信息的电能所在,但主板电池没电之后,时间会回到出厂日期,操作系统也无法正常开机。听到这么说,你肯定不会以为主板电池不重要了吧!那么主板电池没电了该怎么更换呢?来,小编带你去看看!主板电池没电会出现以下现象:1、电脑每次开机,时间都会恢复到初始时间,也就..._dell电脑更换主板电池

Android Okhttp拦截器(修改baseurl)_android 使用interceptor拦截器改变baseurl-程序员宅基地

文章浏览阅读2.2k次。问题: 最近有个急手的问题,TM的移动不知道发什么疯,北京移动网络对我们域名有毒,就是不让我们连接,公司想了一个法子,弄俩个域名,默认的这个域名不能使用的时候切换第二个域名,以防在一次失误发生.Globals.BASE_URL = "Http://www.baidu.com";ping(www.baidu.com)//创建一个转换BaseUrl的拦截器Intercept..._android 使用interceptor拦截器改变baseurl

Windows下的字符集转换(ASCII、UICODE、UTF8、GB2312和BIG5互转)_window 字符转化u00004e3b-程序员宅基地

文章浏览阅读1.4k次。我们在使用字符串的时候会遇到各种各样的编码问题不胜其烦。本例例举了一些windows下常用的字符集转换函数。方便使用Unicode和Ascii的互转//unicode转为asciistd::string UnicodeToAscii( const std::wstring& in_str ){ int nNeedChars = WideCharToMultiByte( CP_ACP, 0, in_str.c_str(), -1, 0, 0, 0, 0 ); if (nNeedC_window 字符转化u00004e3b

RDS备份恢复到本地ECS服务器,搭建主从_rds主从备份-程序员宅基地

文章浏览阅读1.6k次。一、恢复云数据库MySQL的备份文件到自建数据库参考阿里文档https://help.aliyun.com/knowledge_detail/41817.htmla.数据库的版本至少为5.6.16及以上(大于等于RDS版本),我用的是5.6.37b.我使用percona-xtrabackup-2.3.8c.下载rds_backup_extract.sh1.下载RDS备份wget _rds主从备份

Jquery下拉框取值_jquery 下拉框点击取值-程序员宅基地

文章浏览阅读417次。Bootstrap 实例 - 选择框 $(function() { $("select").change(function(event) { ////获取当前选择的下一项的值 //var obj = $(this).find("option:selected").next(); //ale_jquery 下拉框点击取值

随便推点

PAT(B) Basic level 1045 解题报告_xing7673-程序员宅基地

文章浏览阅读355次。本人菜鸟。今天去参加了PAT basic level 的考试,只是想练练手,踩踩点,为以后再去考A或者T做准备(感觉是个有生之年系列) 现场考试被最后一题——也即是本题——卡住了,回来以后才想出来了。看来以后还得多多下苦功啊,这种题在A里面应该是20分的。不多说,上题:1045. 快速排序(25)时间限制200 ms_xing7673

java多线程 注意事项_多线程使用及注意事项-程序员宅基地

文章浏览阅读2.5k次。1、并行和并发的区别2、多线程(高并发编程)的优点3、多线程程序需要注意事项4、线程的启动与安全中止5、怎么安全中止线程(interrupt())并行和并发的区别:一个是同时执行,一个是交替执行(线程切换)。例:把线程比做高速公路,如果有条高速公路并排有8条车道,那么最大的并行车辆就是8辆,只要车辆<=8,车辆就可以并行运行。单位时间内通过的车辆,就是并发。多线程(高并发编程)的优点:(1)..._多线程注意事项

OpenCV 相机标定和图像矫正实例演示_opencv github 相机标定图片-程序员宅基地

文章浏览阅读2.1k次。本文主要记录相机标定的代码实现,关于相机标定的原理可以参考:https://blog.csdn.net/weixin_43843780/article/details/89294131本文相机标定的照片采用OpenCV提供的图片,位置:...\opencv\opencv\sources\samples\data中left01~left14.jpg相机标定在OpenCV中实现的主要步骤为:..._opencv github 相机标定图片

计算几何学 | 圆与直线的交点 | Cross Points of a Circle and a Line | C/C++实现_c++ 圆和直线交点-程序员宅基地

文章浏览阅读7.5k次,点赞9次,收藏34次。问题描述求圆c与直线lll的交点。输入:输入按照下述格式给出:cxcxcx cycycy rrrqqqLine1Line_1Line1​Line2Line_2Line2​…LineqLine_qLineq​第1行输入圆心坐标cx,cy以及半径r。第2行输入问题数q。接下来q行按照下述格式输入q个直线LineiLine_iLinei​作为问题。x1x_1x1​ y1y_1y1..._c++ 圆和直线交点

ClickHouse在腾讯游戏营销效果分析中的探索实践_clickhouse业务场景-程序员宅基地

文章浏览阅读276次。分享嘉宾:王方晓腾讯游戏编辑整理:贾志坤 平顶山学院出品平台:DataFunTalk导读:营销活动作为游戏运营的一种重要手段,可以灵活快速的配合游戏各个运营节点的需要而推出,不受游戏版本节奏的影响。而面对数量众多的营销活动和不同的业务诉求,如何在海量日志中评价营销的效果是一个典型的多维分析问题,本次分享主要介绍腾讯游戏营销效果分析的一些概况以及ClickHouse的应用..._clickhouse业务场景

万用表怎么测量电池容量_家电维修必知:万用表测量及使用方法-程序员宅基地

文章浏览阅读1.7w次。万用表怎么用?这是很多新手或是业余爱好者的一个小难题,有了万用表却不会使用。万用表是电工电器行业不可缺少的测量仪表,一般以测量电压、电流和电阻为主要目的。万用表按显示方式分为指针万用表和数字万用表。是一种多功能、多量程的测量仪表,也称三用表,多用表。因数字式万用表更精密,更直观,更简单,所以着重说数字式万用表。但指针式万用表在电路板维修中的优点比数字式万用表确实要好,各有所长吧。数字式万..._万用表测量电池的使用方法

推荐文章

热门文章

相关标签