java时间类API

Posted liuhuan425

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java时间类API相关的知识,希望对你有一定的参考价值。

一、jdk8之前的日期时间的API测试:

1.System了中currentTimeMIllis();//返回从1970年到现在的总毫秒数

2.java.util.Date和子类java.sql.Date   //返回当前日期,后者是兼容数据库类型的日期

  比如:给一个Date类的日期,可以先使用getTime()转化为毫秒数,然后作为参数传递给创建java.sql.Date的实例化作为参数,那么输出该实例化对象就是数据库兼容类型的日期。

3.simpleDateFormat  //对日期Date类的格式化和解析

  两个操作:

  >格式化:日期——>字符串

  

SimpleDateFormat s = new SimpleDateFormat();//实例化SimpleDateFormat
Date date = new Date();
System.out.println(format);
String format = s.format(date);
System.out.println(format);

  运行结果是这样的:

  技术图片

  >解析:格式化的逆过程:

  格式化需要严格对应格式,否则就会抛出异常。默认参数格式就是上面format输出格式,输出就是上面的date输出格式,但是一般来说都喜欢用我们自己看着舒服的格式,比如:

  

SimpleDateFormat s1 = new SimpleDateFormat(“yyy-MM-dd hh:mm:ss”);//实例化SimpleDateFormat
Date date = new Date();
String format = s1.format(date);
System.out.println(format);//2019-05-11 12:50:36

String str = “2019-05-11 12:50:36”
Date date1 = s1.parse(str);//解析
System.out.println(date1);//默认日期格式输出

4.calendar日历类(抽象类)

  4.1实例化的两种方式:

    >创建其子类(GregorianCalendar)的对象

    >调用其静态方法getInstance()获取对象(从源码上其实还是其子类的对象,只是子类难记,用一个方法简单一点)

  4.2常用的方法:

    >get():

int days = calendar.get(Calendar.DAY_OF_MONTH);//获取当前月份的第几天
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//获取当前年份的第几天

    >set():

calendar.set(Calendar.DAY_OF_MONTH,22);//将当前月份的第几天改成第22天

    >add():

calendar.add(Calendar.DAY_OF_MONTH,+/-3);//当前月份的第几天+/-3天

    >getTime():

Date date = calendar.getTime();//日历类——>Date

技术图片

    >setTime():

Date date1 = new Date();
calendar.setTime(date1);//Date转化为日历类
days = calendar.get(Calendar.DAY_OF_MONTH);

输出结构就是以上截图的反着。

在这里其实可以看出来,8.0之前的时间日期API有很多问题要解决:

  • 可变性:像日期时间这样的类应该是不可变的,但是calendar却是没有返回值,直接修改本身。
  • 偏移性:Date中的年份是从1900年开始,而月份都是从0开始。
  • 格式化:格式化只对Date有用,而Calendar则不行。
  • 侧歪,它们线程不安全;不能处理闰秒等。

 

二、jdk8中新的时间日期API:

1.LocalDate(日期)、LocalTime(时间)、LocalDateTime(日期加时间)

技术图片

以上这些新的方法就解决了Date和Calendar类的缺点。

用法举例:

LocalDate localDate = LocalDate.now();//获取当前的日期
LocalTime localTime = LocalTime .now();//获取当前的时间
LocalDateTime localDateTime = LocalDateTime.now();//获取当前的日期加时间

2.Instant(类比Date,记录毫秒数):

它的一些方法如下:

技术图片

用法如下:

Instant instant = Instant.now();//获取本初子午线对应的标准时间,大概比北京时间早8个小时

OffsetDateTime offsetDateTime  = instant.atOffset(ZoneOffset.ofHours(8));//修改成北京时间

long milli = instant.toEpochMilli();//获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数 ——>Date类的getTime()

Instant instant1 = Instant.ofEpochMilli(1550475314895L);//通过给定的毫秒数,获取Instant实例,输出为日期

 

 3.格式化与解析日期时间:

技术图片

具体使用案例。参照上面的SimpleDateFormat用法。


 

以上是关于java时间类API的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

导航到另一个片段时触发 API 调用

java代码在片段活动中不起作用

我正在使用融合位置 API 在回收视图适配器中查找当前位置,适配器由片段类使用

java.lang.IllegalStateException:片段未附加到活动

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例