时间格式化工具,一秒前,一分钟前,一小时前,昨天,一天前
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; } } }
文章浏览阅读1.1k次,点赞3次,收藏4次。而枚举中定义的枚举常量,变成了相应的 public static final 属性,而且其类型就抽象类的类型,名字就是枚举常量的名字。位向量是一种极为高效的位运算操作,由于直接存储和操作都是 bit,因此 EnumSet 空间和时间性能都十分可观,足以媲美传统上基于 int 的 “位标志” 的运算,关键是我们可像操作 set 集合一般来操作位运算。枚举的主要目的是加强编译时类型的安全性。枚举在日常编码中几乎是必不可少的,如何用好,如何用精,还需要基础知识的铺垫,本文也正是基于此带大家从头到尾梳理了一遍。_java 枚举
文章浏览阅读1.1w次。我门知道主板是电脑配件的核心之一。那么主板电池也是非常重要的存在。有人问主板电池有什么用?其实主板电池是记录计算机系统的时间和维持CMOS的BIOS信息的电能所在,但主板电池没电之后,时间会回到出厂日期,操作系统也无法正常开机。听到这么说,你肯定不会以为主板电池不重要了吧!那么主板电池没电了该怎么更换呢?来,小编带你去看看!主板电池没电会出现以下现象:1、电脑每次开机,时间都会恢复到初始时间,也就..._dell电脑更换主板电池
文章浏览阅读2.2k次。问题: 最近有个急手的问题,TM的移动不知道发什么疯,北京移动网络对我们域名有毒,就是不让我们连接,公司想了一个法子,弄俩个域名,默认的这个域名不能使用的时候切换第二个域名,以防在一次失误发生.Globals.BASE_URL = "Http://www.baidu.com";ping(www.baidu.com)//创建一个转换BaseUrl的拦截器Intercept..._android 使用interceptor拦截器改变baseurl
文章浏览阅读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
文章浏览阅读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主从备份
文章浏览阅读417次。Bootstrap 实例 - 选择框 $(function() { $("select").change(function(event) { ////获取当前选择的下一项的值 //var obj = $(this).find("option:selected").next(); //ale_jquery 下拉框点击取值
文章浏览阅读355次。本人菜鸟。今天去参加了PAT basic level 的考试,只是想练练手,踩踩点,为以后再去考A或者T做准备(感觉是个有生之年系列) 现场考试被最后一题——也即是本题——卡住了,回来以后才想出来了。看来以后还得多多下苦功啊,这种题在A里面应该是20分的。不多说,上题:1045. 快速排序(25)时间限制200 ms_xing7673
文章浏览阅读2.5k次。1、并行和并发的区别2、多线程(高并发编程)的优点3、多线程程序需要注意事项4、线程的启动与安全中止5、怎么安全中止线程(interrupt())并行和并发的区别:一个是同时执行,一个是交替执行(线程切换)。例:把线程比做高速公路,如果有条高速公路并排有8条车道,那么最大的并行车辆就是8辆,只要车辆<=8,车辆就可以并行运行。单位时间内通过的车辆,就是并发。多线程(高并发编程)的优点:(1)..._多线程注意事项
文章浏览阅读2.1k次。本文主要记录相机标定的代码实现,关于相机标定的原理可以参考:https://blog.csdn.net/weixin_43843780/article/details/89294131本文相机标定的照片采用OpenCV提供的图片,位置:...\opencv\opencv\sources\samples\data中left01~left14.jpg相机标定在OpenCV中实现的主要步骤为:..._opencv github 相机标定图片
文章浏览阅读7.5k次,点赞9次,收藏34次。问题描述求圆c与直线lll的交点。输入:输入按照下述格式给出:cxcxcx cycycy rrrqqqLine1Line_1Line1Line2Line_2Line2…LineqLine_qLineq第1行输入圆心坐标cx,cy以及半径r。第2行输入问题数q。接下来q行按照下述格式输入q个直线LineiLine_iLinei作为问题。x1x_1x1 y1y_1y1..._c++ 圆和直线交点
文章浏览阅读276次。分享嘉宾:王方晓腾讯游戏编辑整理:贾志坤 平顶山学院出品平台:DataFunTalk导读:营销活动作为游戏运营的一种重要手段,可以灵活快速的配合游戏各个运营节点的需要而推出,不受游戏版本节奏的影响。而面对数量众多的营销活动和不同的业务诉求,如何在海量日志中评价营销的效果是一个典型的多维分析问题,本次分享主要介绍腾讯游戏营销效果分析的一些概况以及ClickHouse的应用..._clickhouse业务场景
文章浏览阅读1.7w次。万用表怎么用?这是很多新手或是业余爱好者的一个小难题,有了万用表却不会使用。万用表是电工电器行业不可缺少的测量仪表,一般以测量电压、电流和电阻为主要目的。万用表按显示方式分为指针万用表和数字万用表。是一种多功能、多量程的测量仪表,也称三用表,多用表。因数字式万用表更精密,更直观,更简单,所以着重说数字式万用表。但指针式万用表在电路板维修中的优点比数字式万用表确实要好,各有所长吧。数字式万..._万用表测量电池的使用方法