java的时间类汇总(齐全)

 更新时间:2022年09月09日 09:18:02   作者:SunDuncan​​​​​​​  
这篇文章主要介绍了java的时间类汇总(齐全),文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下

前言

在项目开发中,我们用到了很多的时间类,很容易搞混,每次都要去网上查一遍文档,现在自己整理一下,忘记了直接查,没网也能直接撸码。同时自己也巩固一下。对时间类不熟悉的朋友也可以借鉴一下。

这边主要是整理1.8的方法,如果方法已经被弃用了则不在整理

基础类

这个部分整理一下,我们常用的时间类:

简述
java.util.Date(父类)最基本的时间类
java.sql.Date格式年月日,没有无参构造
java.sql.time时分秒
java.sql.Timestamp年月日时分秒毫秒
java.util.Calendar(日历)可以表示年月日时分秒毫秒
java.text.DateFormat时间可以格式化

java.util.Date的用法实例

Date date = new Date();
//Date date1 = new Date(0L); // 可以传入Long值,表示距离1970年1月1日00:00:00 毫秒值  // 默认当前
System.out.println("[java.util.Date] " + date);            // 默认输出格式
System.out.println("[java]date.Date]--getTime() " + date.getTime());  // 时间戳 距离1970.1.1的毫秒数
System.out.println("[java]date.Date]--toInstant() " + date.toInstant()); // 转化成Instant格式

结果:

java.sql.Date的用法实例

java.sql.Date date = new java.sql.Date(new Date().getTime()); // 构造函数 传入Long值,是距离1970年1月1日的毫秒值
System.out.println("[java.sql.Date] " + date);
date.setTime(0L);   // 相当于重置一下时间,填入的还是Long值
System.out.println("[java.sql.Date] - setTime(0L) 后 " + date);

结果:

java.sql.Time的用法实例

// System.currentTimeMillis() 获取的值 和 new java.util.Date的getTime的值是一样的
// 但这个不能保证唯一,如果在短时间内重复获取可能会获得相同的值
Time time = new Time(System.currentTimeMillis()); // 构造函数 传入的Long的值
System.out.println("[java.sql.Time] " + time);   // 时:分:秒
time.setTime(0L); // 重置时间
System.out.println("[java.sql.Time] - setTime(0L) 后 " + time);

结果:

java.sql.Timestamp 用法实例

Long systemTime = System.currentTimeMillis();
Timestamp timestamp = new Timestamp(systemTime);
//        timestamp.setTime(0L);   // 这个不解释和之前的一样
System.out.println("[System.currentTimeMillis()] " + systemTime);
System.out.println("[java.sql.Timestamp] " + timestamp);
System.out.println("[java.sql.Timestamp] - getNanos() " + timestamp.getNanos());
System.out.println("[java.sql.Timestamp] - getTime() " + timestamp.getTime());
timestamp.setNanos(892317);  // 设置纳秒级时间
System.out.println("[java.sql.Timestamp] -setNanos(100) 后 " + timestamp);

结果:

java.util.Calendar 用法实例

这个不是线程安全的,这个的优势在于我可以获取到相应的年月日时分秒,这个主要通过get方法获取,不过直接用底下的simpleDateFormat,这边做了解

        Calendar calendar = new GregorianCalendar();
        System.out.println("[java.util.Calendar--getTime] " + calendar.getTime());
        System.out.println("[java.util.Calendar--getWeekYear] " + calendar.getWeekYear());
        System.out.println("[java.util.Calendar--getMinimalDaysInFirstWeek ] "  + calendar.getMinimalDaysInFirstWeek());
        System.out.println("[java.util.Calendar--getFirstDayOfWeek ] "  + calendar.getFirstDayOfWeek());
        System.out.println("[java.util.Calendar--getTimeInMillis ] "  + calendar.getTimeInMillis());
        System.out.println("[java.util.Calendar--getWeeksInWeekYear ] "  + calendar.getWeeksInWeekYear());
        System.out.println("[java.util.Calendar--getMinimalDaysInFirstWeek ] "  + calendar.getMinimalDaysInFirstWeek());
​
        // 当前时间 2022-09-07
        System.out.println("[java.util.Calendar--calendar.getActualMaximum(Calendar.DATE)] " + calendar.getActualMaximum(Calendar.DATE));
        System.out.println("[java.util.Calendar--calendar.get(Calendar.YEAR)] " + calendar.get(Calendar.YEAR));
        System.out.println("[java.util.Calendar--calendar.get(Calendar.MONTH)] " + calendar.get(Calendar.MONTH));
        System.out.println("[java.util.Calendar--calendar.get(Calendar.DATE)] " + calendar.get(Calendar.DATE));
        System.out.println("[java.util.Calendar--calendar.get(Calendar.DAY_OF_WEEK) " + calendar.get(Calendar.DAY_OF_WEEK));
        System.out.println("[java.util.Calendar--calendar.getMaximum(Calendar.DATE) " + calendar.getMaximum(Calendar.DATE));

java.text.SimpleDateFormat用法实例

这个主要是可以自己去定义输出/输入时间的格式,比如Date默认的是 1970-01-01,现在可以修改成必入 1970/01/01

底下的是类型的匹配的字符

LetterDate or Time ComponentPresentationExamples
GEra designatorTextAD
yYearYear199696
YWeek yearYear200909
MMonth in year (context sensitive)MonthJulyJul07
LMonth in year (standalone form)MonthJulyJul07
wWeek in yearNumber27
WWeek in monthNumber2
DDay in yearNumber189
dDay in monthNumber10
FDay of week in monthNumber2
EDay name in weekTextTuesdayTue
uDay number of week (1 = Monday, ..., 7 = Sunday)Number1
aAm/pm markerTextPM
HHour in day (0-23)Number0
kHour in day (1-24)Number24
KHour in am/pm (0-11)Number0
hHour in am/pm (1-12)Number12
mMinute in hourNumber30
sSecond in minuteNumber55
SMillisecondNumber978
zTime zoneGeneral time zonePacific Standard TimePSTGMT-08:00
ZTime zoneRFC 822 time zone-0800
XTime zoneISO 8601 time zone-08-0800-08:00

其中的类型为:

  • Text: 对于格式化,如果模式字母的数量是4以上,则使用完整的形式; 否则,如果有的话,使用简短或缩写形式。 对于解析,两种形式都是接受的,与模式字母的数量无关。
SimpleDateFormat sdf = new SimpleDateFormat("E");
SimpleDateFormat sdf1 = new SimpleDateFormat("EE");
SimpleDateFormat sdf2 = new SimpleDateFormat("EEE");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEEE");
​
System.out.println("[java.text.SimpleDateFormat--E] " + sdf.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--EE] " + sdf1.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--EEE] " + sdf2.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--EEEE] " + sdf3.format(new Date()));

  • Number: 对于格式化,模式字母的数量是最小位数,而较短的数字将零填充到此数量。 对于解析,模式字母的数量将被忽略,除非需要分隔两个相邻的字段。
SimpleDateFormat sdf4 = new SimpleDateFormat("w");
SimpleDateFormat sdf5 = new SimpleDateFormat("ww");
SimpleDateFormat sdf6 = new SimpleDateFormat("www");
SimpleDateFormat sdf7 = new SimpleDateFormat("wwww");
​
System.out.println("[java.text.SimpleDateFormat--w] " + sdf4.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--ww] " + sdf5.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--www] " + sdf6.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--wwww] " + sdf7.format(new Date()));

  • Year:对于格式化,如果模式字母数为2,那么年份将被截断为2位数; 否则被解释为Number(不足补0)
 SimpleDateFormat sdf8 = new SimpleDateFormat("y");
SimpleDateFormat sdf9 = new SimpleDateFormat("yy");
SimpleDateFormat sdf10 = new SimpleDateFormat("yyy");
SimpleDateFormat sdf11 = new SimpleDateFormat("yyyy");
SimpleDateFormat sdf12 = new SimpleDateFormat("yyyyy");
​
System.out.println("[java.text.SimpleDateFormat--y] " + sdf8.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--yy] " + sdf9.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--yyy] " + sdf10.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--yyyy] " + sdf11.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--yyyyy] " + sdf12.format(new Date()));

  • Month: 如果模式字母数为3以上,则该月份被解释为text; 否则,它被解释为number
SimpleDateFormat sdf8 = new SimpleDateFormat("M");
SimpleDateFormat sdf9 = new SimpleDateFormat("MM");
SimpleDateFormat sdf10 = new SimpleDateFormat("MMM");
SimpleDateFormat sdf11 = new SimpleDateFormat("MMMM");
SimpleDateFormat sdf12 = new SimpleDateFormat("MMMMM");
​
System.out.println("[java.text.SimpleDateFormat--M] " + sdf8.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--MM] " + sdf9.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--MMM] " + sdf10.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--MMMM] " + sdf11.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--MMMMM] " + sdf12.format(new Date()));

其他的类型和时区有关,暂时不去做描述先知道上面的常见的几个

举个常见的例子:

SimpleDateFormat sdf13 = new SimpleDateFormat("y-MM-dd kk:mm:ss"); // 这里的年也可以用 yyyy,这样子和数量一致,好理解罢了
System.out.println("[java.text.SimpleDateFormat--y-MM-dd kk:mm:ss] " + sdf13.format(new Date()));

 常用方法 parse,format

SimpleDateFormat sdf13 = new SimpleDateFormat("y-MM-dd");
// 字符串转化为Date, 需要抛出异常
Date date = sdf13.parse("2022-01-02");
System.out.println("[java.text.SimpleDateFormat--parse] " + date.toString());
// Date转化为String
String currentDateString = sdf13.format(new Date());
System.out.println("[java.text.SimpleDateFormat--format] " + currentDateString);

接下来的时间类都是jdk1.8新增的

相对来说,底下的时间是没有偏移量的比如1就代表周一,而不要加。然后还是线程安全的

底下的我放在一起做个比较

LocalDate,LocalTime,LocalDateTime用法实例

/**
 * 获取当前的日期
 */
LocalDate localDate = LocalDate.now();
System.out.println("[java.time.LocalDate] -- now " + localDate);
LocalTime localTime = LocalTime.now();
System.out.println("[java.time.LocalTime ] -- now " + localTime);
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("[java.time.LocalDateTime ] -- now " + localDateTime);
/**
 * 获取指定的日期
 */
LocalDate localDate1 = LocalDate.of(2022,9,7);
System.out.println("[java.time.LocalDate] -- of " + localDate1);
LocalTime localTime1 = LocalTime.of(12,53,18);
System.out.println("[java.time.LocalTime] -- of " + localTime1);
LocalDateTime localDateTime1 = LocalDateTime.of(2000, 12,3,12,3,4);
System.out.println("[java.time.LocalDateTime ] -- of " + localDateTime1);
/**
 * get的一些方法
 */
System.out.println("[java.time.LocalDateTime ] -- getYear " + localDate1.getYear());
System.out.println("[java.time.LocalDateTime ] -- getDayOfMonth " + localDate1.getDayOfMonth());
System.out.println("[java.time.LocalDateTime ] -- getMonth " + localDate1.getMonth());
System.out.println("[java.time.LocalDateTime ] -- getMonthValue " + localDate1.getMonthValue());
​
​
​
/**
 * with 就是重新赋值(原LocalDateTime不变)
 * 这边就举一个例
 */
LocalDateTime localDateTime2 = localDateTime1.withYear(2011);
System.out.println("[java.time.LocalDateTime ] --原来 2000年 " + localDateTime1);
System.out.println("[java.time.LocalDateTime ] --原来 2000年  withYear(2011) " + localDateTime2);
​
/**
 * 加 减操作
 * 举一个加的例子
 * minusXXX 这个是减
 */
System.out.println("[java.time.LocalDateTime ] --原来 12月份 " + localDateTime1.getMonthValue());
System.out.println("[java.time.LocalDateTime ] --原来 12月份  plusMonths(1) " + localDateTime1.plusMonths(1).getMonthValue());

DateTimeFormatter

这个主要可以用来进行String 和 LocalXXX之间的转化,案例

 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
 System.out.println(dateTimeFormatter.format(LocalDateTime.now()));

总结

这边总结了基本常用的时间类,没有把所有的方法都列出来,不过常见的列出来了,如果没有强制要求建议使用 1.8

到此这篇关于java的时间类汇总(齐全)的文章就介绍到这了,更多相关java时间类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Socket实现聊天室附1500行源代码

    Java Socket实现聊天室附1500行源代码

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。本篇文章手把手带你通过Java Socket来实现自己的聊天室,大家可以在过程中查缺补漏,温故而知新
    2021-10-10
  • 利用微信小程序+JAVA实现微信支付的全过程

    利用微信小程序+JAVA实现微信支付的全过程

    微信支付是一种在线支付解决方案,允许用户通过微信内的支付功能进行付款,下面这篇文章主要给大家介绍了关于利用微信小程序+JAVA实现微信支付的相关资料,需要的朋友可以参考下
    2024-08-08
  • Java批量插入数据的代码实现

    Java批量插入数据的代码实现

    日常工作或者学习中,可能会遇到批量插入数据的需求,一般情况下数据量少的时候,我们会直接调用批量接口插入数据即可,当数据量特别大时,我们就会用到分批插入数据,所以本文给大家介绍了Java批量插入数据的代码实现,需要的朋友可以参考下
    2024-01-01
  • java 解决异常 2 字节的 UTF-8 序列的字节2 无效的问题

    java 解决异常 2 字节的 UTF-8 序列的字节2 无效的问题

    这篇文章主要介绍了java 解决异常 2 字节的 UTF-8 序列的字节 2 无效的问题的相关资料,需要的朋友可以参考下
    2016-12-12
  • 使用Mybatis的Batch Insert Support 实现批量插入

    使用Mybatis的Batch Insert Support 实现批量插入

    这篇文章主要介绍了使用Mybatis的Batch Insert Support 实现批量插入。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • springBoot中的properties配置解析

    springBoot中的properties配置解析

    这篇文章主要介绍了springBoot中的properties配置解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java集合之Map接口与实现类详解

    Java集合之Map接口与实现类详解

    这篇文章主要为大家详细介绍了Java集合中的Map接口与实现类,文中的示例代码讲解详细,对我们学习Java有一定的帮助,感兴趣的可以了解一下
    2022-12-12
  • Mybatis实现单个和批量定义别名typeAliases

    Mybatis实现单个和批量定义别名typeAliases

    这篇文章主要介绍了Mybatis实现单个和批量定义别名typeAliases,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java虚拟机JVM性能优化(三):垃圾收集详解

    Java虚拟机JVM性能优化(三):垃圾收集详解

    这篇文章主要介绍了Java虚拟机JVM性能优化(三):垃圾收集详解,本文讲解了众多的JVM垃圾收集器知识点,需要的朋友可以参考下
    2014-09-09
  • Mybatis中collection和association的使用区别详解

    Mybatis中collection和association的使用区别详解

    这篇文章主要介绍了Mybatis中collection和association的使用区别详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论