当前位置: 代码迷 >> 综合 >> 【JAVASE(5)】JAVASE学习--时间篇
  详细解决方案

【JAVASE(5)】JAVASE学习--时间篇

热度:58   发布时间:2023-11-30 15:07:21.0

java中的时间类

一、JDK1.8之前日期和时间的API
    1、public.long.System类提供了大量静态方法,可以获取与系统相关的信息或系统级操作,常用方法:
        public static long currentTimeMillis();
            {返回当前时间与1970年1月1日0时0分0秒一毫秒为单位的时间差}--返回的这个数称为一个时间戳{常用于测试程序效率}

    2、毫秒:
        毫秒的换算:
            1000分之一秒,1000毫秒=1秒
        毫秒作用:
            可以对时间日期进行计算:日期转换成毫秒进行计算
        日期转换成毫秒:
            当前日期:2088-08-08
            时间原点(0毫秒):1970年1月1日00:00:00(格林尼治时间)
                就是计算当前日期到时间原点一共经历了多少毫秒
        注:
            中国属于东八区,会把时间增加8小时:1970年1月1日08:00:00
        毫秒转换为日期:
            1天=24 x 60 x 60秒=86400000毫秒

    3、java.util.Date类
            |--->java.sql.Date:
        表示日期和时间类;类Date表示特定瞬间,精确到毫秒

        注:
            1.两个构造器的使用

构造器一:Date():创建一个对应当前时间的Date对象,获取当前系统的日期和时间构造器二:new Date(long 时间L);创建指定毫秒数的Date对象,即传递毫秒值,把毫秒值转换为Date日期

            2.两个方法的使用

>toString():显示当前的年、月、日、时、分、秒>getTime():获取当前Date对象对应的毫秒数时间戳(把日期转换为毫秒值)相当于:System.currentTimeMillis();方法返回自1970年1月1日08:00:00 CST 以来此Date对象表示的毫秒数

           3.java.sql.Date对应数据库中的日期类型的变量

> 关于实例化:new java.sql.Date(long 时间L);> sql.Date--->util.Date对象,直接赋值,多态> util.Date--->sql.Date对象{Date dateSix = new Date();java.sql.Date dataSeven=new java.sql.Date(dateSix.getTime());}


    4、java.text.DateFormat:时间、日期格式化子类的抽象类
        作用:
            格式化(日期-->文本),解析(文本-->日期)
        成员方法:

String format(Date date):按照指定模式,把date日期,格式化为符合模式的字符串(文本)使用步骤:1.创建SimpleDateFormat对象,构造方法中传递指定模式2.调用SimpleDateFormat对象中的方法format,按照构造方法中的指定模式,把Date日期格式化为符合模式的字符串(文本)Date parse(String source)把符合模式的字符串(文本),解析为date日期使用步骤:1.创建SimpleDateFormat对象,构造方法中传递指定模式2.调用SimpleDateFormat对象中的方法parse,把符合构造方法模式的字符串解析为日期注:public Date parse(String source)throws ParseExceptionparse方法声明了一个异常ParseException如果字符串和构造方法的模式不一样,那么程序就会抛出此异常调用一个抛出异常的方法,就必须处理此异常,要么throws继续抛出此异常,要么try catch自己处理这个异常

        DateFormat是一个抽象类,无法直接创建对象使用,可以使用DateFormat类的子类:

            java.text.SimpleDateFormat extends DateFormat

        SimpleDateFormat的使用:
            SimpleDateFormat对日期Date类的格式化和解析
                1.两个操作
                    1.1格式化:日期-->字符串
                        new SimpleDateFormat();
                        new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

                    1.2解析:格式化的逆过程,字符串-->日期
                        调用parse("指定格式化时间")方法
                2.构造方法:

SimpleDateFormat(String pattern):用给定的模式和默认环境的日期格式符号构造参数:String pattern:传递指定模式。【模式:区分大小写】y 年;M 月;d 日;H 时;m 分;s 秒写对应模式,会把模式替换为对应的日期和时间“yyyy-MM-dd HH:mm:ss”注:模式中的字母不能更改,连接模式中的符号可以改变“yyyy年MM月dd日 HH时mm分ss秒”

                3.SimpleDateFormat的实例化:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
System.out.println(sdf.format(date));


    5、java.util.Calendar类:日历类
        Calendar类是个日历类,里面提供了很多操作日历字段的方法(YEAR,MONTH,DYA_OF_MONTH,HOUR)
        Calendar类无法直接创建对象使用,里面有个静态方法getInstance(),该方法返回了Calendar类的子类对象
        static Calendar getInstance()使用默认时区和语言环境获得一个日历
        Calendar日历类的使用
            1.实例化:
                1.1调用GregorianCalendar的构造器
                1.2调用Calendar.getInstance()方法
            2.常用方法:

public int get(int field):返回给定日历字段值参数:传递指定的日历字段(YEAR,MONTH,DATE,DYA_OF_MONTH,HOUR,MINUTE,SECOND)返回值:日历字段代表的具体值public void set(int field,int value):将给定的日历字段设置为给定值参数:int field:传递指定的日历字段(YEAR,MONTH,DATE,DYA_OF_MONTH,HOUR,MINUTE,SECOND)int value:给指定字段设置的值public abstract void add(int field,int mount):由日历的规则,为给定的日历字段添加或减去指定的时间量把指定的字段增加/减少指定的值参数:int field:传递指定的日历字段(YEAR,MONTH,DATE,DYA_OF_MONTH,HOUR,MINUTE,SECOND)int mount:增加/减少指定值整数:增加     负数:减少public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒变量)的Date对象把日历对象转换为日期对象public Date setTime():设置一个表示此Calendar时间值(从历元到现在的毫秒变量)的Date对象方法的参数:int field:日历类字段,可以使用Calendar类的静态成员变量获取public static final int 【YEAR,MONTH,DATE,DYA_OF_MONTH,HOUR,MINUTE,SECOND】

            3.在日历类中:
                获取月份时:一月是0...十二月是11
                获取星期时:周日是1,周一是2...周六是7
            4.jdk8之前(不含jdk8)的Calendar类存在的问题:
                4.1:可变性:像日期和时间这样的类实际上是不可变的
                4.2:偏移性:Date当中的年份是从1990年开始的,而月份都是从0开始
                4.3:格式化:格式化只对Date有用,Calendar则不行
                4.4:它们也不是线程安全的;不能处理润秒等

二、DK1.8中常用日期和时间的API
    1、LocalDate、LocalTime、LocalDateTime的使用:
        前提:
            这三个类有点类似于Calendar类;在jdk8之后才有的这三个类,在jdk8之前需要额外进行导包Joda-Time
        说明:

1.LocalDateTime相比于另外两个类较为常用2.now();方法作用:将三个类进行实例化,调用当前的日期、时间、日期+时间3.of();方法作用:指定特定的年月日时分秒不存在偏移量4.getXxx();方法作用:获取Xxx指定的时间5.withXxx();方法作用:修改日期相关属性,体现其修改的不可变性6.plusXxx();方法作用:对现有时间进行增加属性处理,体现其修改的不可变性7.minusXxx();方法作用:对现有时间进行减少属性处理,体现其修改的不可变性

    2、Instant的使用:
        类似于java.util.Date类
            1、实例化:调用now();获取本初子午线对应的标准时间
            2、设置偏移量:调用atOffset(ZoneOffset.ofHours(int hour))
            3、toEpochMilli():获取从1970年1月1日0时0分0秒开始到调用此方法时的毫秒数--->Date类的getTime()
            4、ofEpochMilli(long XxxL);通过给定的毫秒数,获取Instant实例-->Date(long millis)

    3、DateTimeFormatter:格式化或解析日期、时间;类似于SimpleDateFormat
        1.实例化:
            方式一:
                预定义标准格式:ISO_LOCAL_DATE_TIME,ISO_LOCAL_DATE,ISO_LOCAL_TIME
            方式二:
                本地化相关的格式,如:
                    ofLocalizedDateTime();
                    ofLocalizedDateTime(FormatStyle.LONG);
                其中

 {FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT:适用于LocalDateTime}

                本地化相关的格式:如:
                    ofLocalizedDate()
                其中

{FormatStyle.FULL/FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT:适用于LocalDate
}

            方式三:
                自定义:如ofPattern("yyy-MM-dd hh:mm:ss E")
        2.格式化:
            先实例化LocalXxx,然后再调用format()方法返回新的字符串对象
        3.解析:
            调用DateTimeFormatter实例对象的parse()方法传递正确参数


   4、JDK8之前和JDK8中日期、时间相关的类有:
        java.util.Date和java.sql.Date  -> Instant
        SimpleDateFormat   ---->  DateTimeFormatter
        Calendar     ---->    LocalDate、LocalTime、LocalDateTime

   5、日期时间api的迭代
        第一代:jdk1.0 Date类
        第二代:jdk1.1 Calendar类,一定程度上替代了Date类
        第三代:jdk1.8 提出了新的一套api

   6、jdk8之前的日期时间的API测试
        1.System类中的currentTimeMillis();
        2.java.util.Date和子类java.sql.Date
        3.SimpleDateFormat
        4.Calendar

时间类程序小实例:

private static void demo01() {SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");创建SimpleDateFormat对象,构造方法中传递指定模式//String format(Date date),按照指定模式,把date日期,格式化为符合模式的字符串Date date=new Date();String d = sdf.format(date);调用SimpleDateFormat对象中的方法format,按照构造方法中的指定模式,把Date日期格式化为符合模式的字符串(文本)System.out.println(date);Tue Sep 29 16:12:35 CST 2019System.out.println(d);2019年09月29日 16时12分35秒
}

以上是本篇小节,不喜勿喷,感谢理解。

相关链接:
?【JAVASE(6)】JAVASE学习--字符串篇_lixxkv的博客-CSDN博客
【JAVASE(4)】JAVASE学习--线程篇_lixxkv的博客-CSDN博客

  相关解决方案