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时间类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文详解Spring Security的基本用法

    一文详解Spring Security的基本用法

    Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架, 提供了完善的认证机制和方法级的授权功能。本文将通过一个简单的案例了解一下Spring Security的基本用法,需要的可以参考一下
    2022-05-05
  • Java关于JDK1.8新特性的Stream流

    Java关于JDK1.8新特性的Stream流

    这篇文章主要介绍了版本薇JDK1.8 的Java中的Stream流,Stream流是一个来自数据源的元素队列并支持聚合操作,感兴趣的朋友可以参考下面文章内容
    2021-09-09
  • JavaWeb.servlet的基本使用方法详解

    JavaWeb.servlet的基本使用方法详解

    Servlet指在服务器端执行的一段Java代码,可以接收用户的请求和返回给用户响应结果,下面这篇文章主要给大家介绍了关于JavaWeb.servlet基本使用的相关资料,需要的朋友可以参考下
    2022-04-04
  • Java中策略设计模式的实现及应用场景

    Java中策略设计模式的实现及应用场景

    策略设计模式是Java中一种常用的设计模式,它通过定义一系列算法并将其封装成独立的策略类,从而使得算法可以在不影响客户端的情况下随时切换。策略设计模式主要应用于系统中存在多种相似的算法、需要灵活调整算法逻辑或者需要扩展新的算法等场景
    2023-04-04
  • Java使用PrepareStatement实现数据的插入与查询操作

    Java使用PrepareStatement实现数据的插入与查询操作

    这篇文章主要为大家详细介绍了Java如何使用PrepareStatement实现数据的插入与查询操作,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-09-09
  • Java全面细致讲解类与对象

    Java全面细致讲解类与对象

    类和对象是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型;变量就是可以变化的量,存储在内存中—个可以拥有在某个范围内的可变存储区域
    2022-05-05
  • 深入理解Spring AOP

    深入理解Spring AOP

    这篇文章主要介绍了深入理解Spring AOP,详细的介绍了spring aop的具体实现与理论
    2017-01-01
  • Java 中文字符按Unicode排序的实现方法

    Java 中文字符按Unicode排序的实现方法

    这篇文章主要介绍了Java 中文字符按Unicode排序的实现方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • JDBC中PreparedStatement详解以及应用场景实例介绍

    JDBC中PreparedStatement详解以及应用场景实例介绍

    PreparedStatement对象代表的是一个预编译的SQL语句,用它提供的setter方法可以传入查询的变量,这篇文章主要给大家介绍了关于JDBC中PreparedStatement详解以及应用场景实例介绍的相关资料,需要的朋友可以参考下
    2024-02-02
  • Springboot视频接口报大量的ClientAbortException找不到原因的解决

    Springboot视频接口报大量的ClientAbortException找不到原因的解决

    本文主要介绍了Springboot视频接口报大量的ClientAbortException找不到原因的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论