目 录CONTENT

文章目录

时间相关的工具类

FatFish1
2024-12-16 / 0 评论 / 0 点赞 / 51 阅读 / 0 字 / 正在检测是否收录...

java.util.Date - java中的日期类

Date preTime = new Date(long)

long可以是秒级长整时间计算出来的时间差,例如

// 当前时间-1970年的长整-时间差
long preLong = (Long.parseLong(preStr) - START_TIME - timeDiff) * 1000; // 计算到毫秒。

通过date.getTime()方法即可获取到long类型的时间,但要获取当前时间的long类型Time,就不推荐使用getTime了

这个时间差即称为时间戳。它是linux和虚拟机系统下最真实最唯一的时间标志。通过时间戳的加减可以精确计算时区(偏移量的计算方法)

也可以传空参构造当前时间:

Date now = new Date()

时区取的就是当前jvm时区,因为Date包不具备在其他时区获取UTC时间的能力,因此需要进行一步转换:

Date utcNow = new Date(System.currentTimeMillis() - TimeZone.getDefault().getRawOffset())

上面System.cuurentTimeMillis()代替new Date().getTime(),为推荐用法

java.util.TimeZone - java中的时区类

获取当前java运行环境时区

TimeZone.getDefault()

也可以根据TimeZoneId获取

TimeZone.getTimeZone(String id)

获取当前时区与UTC时区的偏移量

TimeZone.getDefault().getRawOffset()

注意:

获取的偏移量也是long类型,精确到毫秒。结果除以3600000L就是小时数

偏移量带正负号,是根据时区来的,东八区获得就是正数,如果是UTC-8时区就是负数

java.sql.TimeStamp - 数据库中的通用时间类

TimeStamp是一个sql可读的时间计算类型,在sql中一个TimeStamp的格式和计算精度默认为“yyyy-mm-dd hh:mm:ss”。可以通过long类型构造timeStamp

New Timestamp(System.currentTimeMillis())

java.util.Calendar - 日历类

calendar的用法包括:

// 创建计算器实例:
Calender calender = Calender.getInstance()

// 配置时间:
calender.setTime(Date 时间)

// 配置单位和时差:
calender.add(Integer 单位, Integer 时差)

// 输出计算后的时间:
calender.getTime()

// 设置时间:
calender.set(Calendar.HOUR_OF_DAY, int num)-把当前时间中的小时,设置为对应时间

// 做时区转化:
calender.setTimeZone(TimeZone.getTimeZone(timeZone))

注意:通过add方法做加减法时,参数1单位可选项在Calendar类中,有:

cal1.add(Calendar.DAY_OF_MONTH,1); 
cal1.add(Calendar.DAY_OF_YEAR,1); 
cal1.add(Calendar.DATE,1);

虽然这三个都能实现日期加1,但推荐使用第三个,因为DAY_OF_MONTH的主要作用是cal.get(DAY_OF_MONTH),用来获得这一天在是这个月的第多少天,Calendar.DAY_OF_YEAR的主要作用是cal.get(DAY_OF_YEAR),用来获得这一天在是这个年的第多少天,还有DAY_OF_WEEK,用来获得当前日期是一周的第几天

java.text.SimpleDateFormat - 时间格式工具

用于转换时间格式,其用法包括:

// 创建时间格式:
DateFormat dateFormat = new SimpleDateFormat(String pattern)

// 格式化时间:返回的是String类型
dateFormat.format(Date 时间),

// 格式化并返回Date
dateFormat.parse(Date 时间),

常用格式包括:

yyyy-MM-dd HH:mm:ss
yyyyMMddHHmmss
yyyyMMddHHmmssSSS
yyyy-MM-dd'T'HH:mm:ss
yyyy-MM-dd'T'HH:mm:ss'Z'
yyyy
yyMMddHH
EEE MMM dd HH:mm:ss z yyyy  这种是Mon Mar 02 13:57:49 CST 2015格式
yyyy-MM-dd

此处需注意大小写,时间格式类似,可能因为大小写产生不一样的意义,例如常用的24小时制格式“yyyy-MM-dd HH:mm:ss”,如果写“yyyy-MM-dd hh:mm:ss”就变成12小时制

java.util.concurrent.TimeUnit - 并发包下的时间单位

不止是一个时间单位属性,还在并发包中承担着控制线程的作用:

TimeUnit. MILLISECONDS.sleep(60);

apache.commons.lang3.time - apache的时间工具

DateUtils

一个好用的时间工具类,提供了时间切割、计算等能力,配合Calendar使用基本可以完成各类时间处理需求

截取

DateUtils.truncate(new Date(), Calendar.Date)

按日期截取,例如2022.11.21 13:55:21截取为2022.11.21 13:00:00

也可以按月、年、时、分、秒截取

在Calendar中有很多可选截取规格:

Date truncate = DateUtils.truncate(date, Calendar.DATE);   // 截取到当天零点
Date truncate = DateUtils.truncate(date, Calendar.HOUR_OF_DAY);   // 截取到当前所在小时,24小时制
Date truncate = DateUtils.truncate(date, Calendar.DAY_OF_MONTH);   // 截取到当月第一天0点

 计算

功能比较类似Calendar的计算方法

DateUtils.addDays(Date baseDate, int day)

例如

String simpleDate3 = simpleDateFormat.format(DateUtils.addDays(DateUtils.truncate(now, Calendar.DATE), 2));

当now为2022.11.21 13:55:21,截取后加两天为2022.11.23 13:00:00

FastDateFormat - apache提供的带缓存的时间格式工具

为了解决SimpleDateFormat性能问题,提供了一个带缓存的时间格式转换器

可以快速返回时间格式化工具并格式化时间

Date date = FastDateFormat.getInstance(String pattern).parse(String time);

0

评论区