java 之 时间类总结

Posted zero-vic

tags:

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

1、java.util.Date

java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。

Date()使用当前日期和时间来初始化对象。

Date(long millisec),该参数是从1970年1月1日起的毫秒数.

获取当前日期时间

public class DataTest {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);//Tue Jul 07 22:54:59 CST 2020
        System.out.println(date.getTime());//1594133756181
        System.out.println(new Date(System.currentTimeMillis()));//Tue Jul 07 23:35:25 CST 2020
     
    }
}

Date类常用方法

技术图片

 

 

 2、java.sql.Date

包含年月日、对应sql中的DATE类型。是java.util.Date的子类但是只有一个构造函数。

Date(long millisec),该参数是从1970年1月1日起的毫秒数.

获取当前时间

public class SqlDate {
    public static void main(String[] args) {
        Date date = new Date(System.currentTimeMillis());
        System.out.println(date);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date));
//        2020-07-07
//        2020-07-07 11:41:59
    }
}

3、java.sql.Time

包含时分秒为,对应SQL中TIME类型。与java.sql.Date一样有一个有参构造函数。

Time(long millisec),该参数是从1970年1月1日起的毫秒数.

获取当前日期时间

public class SqlDate {
    public static void main(String[] args) {
        Time time = new Time(System.currentTimeMillis());
        System.out.println(time);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(time));
//        23:53:51
//        2020-07-07 11:53:51

    }
}

4、java.sql.Timestamp

时间戳,对应SQL中的TIMESTAMP类型,精确到纳秒级别。

Timestamp(long millisec),该参数是从1970年1月1日起的毫秒数.

获取当前日期时间

public class SqlDate {
    public static void main(String[] args) {
        Timestamp timestamp =new Timestamp(System.currentTimeMillis());
        System.out.println(timestamp);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(timestamp));
//        2020-07-07 23:58:04.907
//        2020-07-07 11:58:04

    }
}

5、java.text.SimpleDateFormat

SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。

将时间字符串转化为Date再格式化

public class DateFormatTest {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
        Date date = sdf.parse("2020年05月20日 13:14:58");
        System.out.println(date);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date));
//        Wed May 20 13:14:58 CST 2020
//        2020-05-20 01:14:58
    }
}

日期和时间格式化编码

技术图片

 

 6、java.util.Calendar

日历类,大多用来获取时间的特殊属性,比如年份,月份,星期几。

Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

jdk1.8新增了创建方法。

public class CalendarTest {
    public static void main(String[] args) {
        //获取当前时间的Calendar对象,可以通过set方法来设置时间
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime());
        //JDK1.8 创建一个指定日期的Calendar对象
        Calendar calendar1 = new Calendar.Builder().setDate(2020,05,20).build();
        System.out.println(calendar1.getTime());
        System.out.println(calendar1.get(Calendar.YEAR));
        System.out.println(calendar1.get(Calendar.MONTH));
        System.out.println(calendar1.get(Calendar.DATE));
        System.out.println(calendar1.get(Calendar.HOUR_OF_DAY));
        System.out.println(calendar1.get(Calendar.MINUTE));
        System.out.println(calendar1.get(Calendar.SECOND));
        System.out.println(calendar1.get(Calendar.DAY_OF_WEEK));
//        Wed Jul 08 00:29:17 CST 2020
//        Sat Jun 20 00:00:00 CST 2020
//        2020
//        5
//        20
//        0
//        0
//        0
//        7

    }
}

Calendar类对象字段类型

技术图片

 

 7、java.util.GregorianCalendar

Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。

Calendar 的getInstance()方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。

GregorianCalendar定义了两个字段:AD和BC。这是代表公历定义的两个时代.。

构造方法

技术图片

 

 常用方法

技术图片

 

 技术图片

 

 java8开始有的新的操作时间的类

8、java.time.LocalDate

LocalDate提供年月日而不提供时分秒信息,它是不可变类且线程安全的。它经常被用于展示year-month-day,day-of-year,day-of-week,week-of-year等格式的信息。

public class LocalDates {
    public static void main(String[] args) {
        LocalDate ld = LocalDate.now();//获取当前时间对象
        System.out.println(ld);
        System.out.println(ld.getYear());//那一年
        System.out.println(ld.getMonth());//那个月
        System.out.println(ld.getDayOfMonth());//几号
        System.out.println(ld.getDayOfWeek());//周几
        System.out.println(ld.getDayOfYear());//一年中第多少天
        System.out.println(ld.isLeapYear());//是否闰年
//        2020-07-08
//        2020
//        JULY
//        8
//        WEDNESDAY
//        190
//        true

    }

}

9、java.time.Time

提供时分秒不提供年月日,也是线程安全并且不可变类。它经常被用于展示hour-minute-second格式的信息。可以对时间进行加减等操作。

public class LocalTimeTest {
    public static void main(String[] args) {
        LocalTime localTime = LocalTime.now();//获取当前时间
        System.out.println(localTime);
        int hour = localTime.getHour();//获取小时
        System.out.println(hour);
        LocalTime addTwoHours = localTime.plusHours(2l);//增加2小时
        System.out.println(addTwoHours);
        LocalTime reduceTOneHour = localTime.minusHours(1L);//减少2小时
        System.out.println(reduceTOneHour);
//        01:05:20.498
//        1
//        03:05:20.498
//        00:05:20.498

    }
}

10、java.time.LocalDateTime

包含年月日时分秒,精确到纳秒级别,同样是线程安全并且不可变类。它可以操作时间中的年月日时分秒并且可以获取其中的属性。

public class LocalDateTimeTest {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);
        //LocalDateTime 和 LocalDate, LocalTime 相互转换
        LocalDate localDate = localDateTime.toLocalDate();
        System.out.println(localDate);
        LocalTime localTime = localDateTime.toLocalTime();
        System.out.println(localTime);
//        2020-07-08T01:13:36.274
// 2020-07-08
// 01:13:36.274
  }
}

11、java.time.Instant

时间戳,就包含年月日时分秒,精确到纳秒级别,同样是线程安全并且不可变类。

public class InstantTest {
    public static void main(String[] args) {
        Instant instant = Instant.now();
        System.out.println(instant);
        //2020-07-07T17:16:23.233Z
    }
}

12、java.time.Duration

时间段,同样是线程安全并且不可变类。

public class DurationTest {
    public static void main(String[] args) {
        Duration duration = Duration.between(LocalTime.of(10,14,59), LocalTime.of(13,14,59));
        long toDays = duration.toDays();
        long toHours = duration.toHours();
        System.out.println(toDays);
        System.out.println(toHours);
//        0
// 3
} }

 

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

2020/7/8 JAVA总结之:匿名对象/内部类/包的声明与访问/访问修饰符/代码块

java 之 时间类总结

elasticsearch代码片段,及工具类SearchEsUtil.java

java中封装,继承,多态,接口学习总结

精通Groovy之简要总结

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