Date类,Calendar类,JDK8中关于日期的新特性

1.java.lang.System类

System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0分0秒之间以毫秒为单位的时间差。

   -------> 此方法适于计算时间差

计算世界时间的主要标准有:UTC(Coordinated Universal Time)

                                               GMT(Creenwich Mean Time)

                                                CST(Central Standard Time)

2.java.util.Date类

表示特定的瞬间,精确到毫秒

构造器:Date():使用无参构造器创建的对象可以获取本地当前时间

           Date(long date)

常用方法:getTime():返回自1970年1月1日0分0秒GMT以来此Date对象表示的毫秒数

                   toString():把此Date对象转换为以下形式的String:dow mon dd hh:mm:ss zzz yyy其中:dow是一周中的某一天                                 (Sun,Mon,Tue,Wed,Thu,Fri,Sat),zzz是时间标准

        //构造器一:Date()
        Date date1 = new Date();
        System.out.println(date1.toString());//1.toString()显示当前的时分秒
        System.out.println(date1.getTime());//2.getTime()当前对象的毫秒数
        //构造器一:Date(2019,5,14)过时,不介意使用

3.java.sql.Date类

是java.util.Date的子类,对应着数据库中的日期类型的变量

实例化:java.sql.Date da = new java.sql.Date(13787964064L);

java.util.Date转化为java.sql.Date:方式一:Date date4 = new java.sql.Date(13787964064L);

                                                                       java.sql.Date date5 =(java.sql.Date) data4;

                                                        方式二:Date date6 = new Date();

                                                                      java.sql.Date date7 =new java.sql.Date(date6.getTime());

4.java.text.SimpleDateFormat类

  • Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
  • 它允许进行格式化:日期->文本 (字符串)    解析:文本->日期
  • 格式化:SimpleDateFormat():默认的格式和语言环境创建对象

                      public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:

                       public String format(Date date):方法格式化时间对象date

  • 解析:public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。
        //实例化
        SimpleDateFormat sdf = new SimpleDateFormat();
        //格式化:日期->字符串
        Date date = new Date();
        String format = sdf.format(date);
        System.out.println(format);
        //解析
        SimpleDateFormat format1 = new SimpleDateFormat("yy.mm.dd hh:mm:aa");
        Date date1 = format1.parse("19-03-04 12:23:15");
        System.out.println(date1);

练习:将字符串”2020-12-24“转化为java.sql.Date

public static void main(String[] args) throws ParseException{
      dae();

    }
    static void dae() throws ParseException{
        String str = "2020-12-21";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date date = sdf.parse(str);
        java.sql.Date birdate = new java.sql.Date(date.getTime());
        System.out.println(birdate);
    }

5.java.util.Calendar类

  • Calendar是一个抽象基类,主要用于完成日期字段之间相互操作的功能。
  • 获取Calendar实例的方法:

                                                 使用Calendar.getInstance()方法

                                                  调用它的子类GregorianCalendar的构造器

  • 一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。

                 

 //1.日历类是抽象类
        //实例化一:创建其子类(GregorianCalendar)的对象
         //实例化二:调用其静态方法getInstance()
        Calendar calendar = Calendar.getInstance();
        //2.常用方法get(),set(),add(),getTime(),setTime()
       int days =  calendar.get(Calendar.DAY_OF_MONTH);  //这个年的第几天,DAY_OF_YEAR,
        System.out.println(days);
        calendar.set(Calendar.DAY_OF_MONTH,22);//返回类型是void ,会把对象改了,在输出的时候,就是这一月的第22天
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
        calendar.add(Calendar.DAY_OF_MONTH,3);//往上加,改的也是对象
        //getTime():日历-->date
        Date date = calendar.getTime();
        System.out.println(date);
        //setTime():date-->日历
        Date date1 = new Date();
        calendar.setTime(date1);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

Calendar面临的问题:

    可变性:像日期和时间这样的类应该是不可变的

    偏移性:Date中的年份是从1990年开始的,而月份是从0开始的。

    格式化:格式化只对Date有用,Calendar则不行。

    此外,他们也不是线程安全的,不能处理闺秒等。

JDK8中引入的java.timeAPI已经纠正了过去的缺陷,包含了所有关于本地日期(LocalDate),本地时间(LocalTime),本地日期时间(LocalDateTime),时区(ZonedDateTime),和 持续时间(Duration)的类。Date类新增了toInstant()方法,用于把Date转换成新的形式。

6.JDK8中新日期时间API

                  java.time-包含值对象的基础包

                  java.time.chrono-提供对不同日历系统的访问

                  java.time.format-格式化和解析日期和时间

                  java.time.temporal-包括底层框架和扩展特性

                  java.time.zone-包含时区支持的类

说明:大多数开发者只会用到基础包和format包,也可能会用到temporal包。

Localdate,LocalTime,LocalDateTime类是其中比较重要的几个类,它们的实例是不可变的对象,分别表示使用ISO-8601日历(公历)系统的日期,时间,时间和日期。他们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。

              LocalDate:代表IOS格式(yyyy-MM-dd)的日期,可以存储生日,纪念日等日期

              LocalTime:表示一个时间,而不是日期

              LocalDateTime:用来表示日期和时间

        //实例化1.now()获取当前日期,时间,或者是日期和时间
         LocalDate local =LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);

        //实例化2.of():设置指定的年月日
        LocalDateTime time = LocalDateTime.of(2012,12,30,2,12,23);
        System.out.println(time);

        //getXXX()当月的第几天
        System.out.println(time.getDayOfMonth());
        System.out.println(time.getDayOfWeek());
        System.out.println(time.getDayOfYear());
        System.out.println(time.getMonthValue());

        //LocalDate体现不可变性
        //withXXX():设置相关属性
        LocalDate l = local.withDayOfMonth(2);
        System.out.println(l);
        System.out.println(local);

        //加减操作,不可变性
        LocalDate ll = local.plusMonths(3);
        System.out.println(ll);
    }

7.瞬时:Instant

 瞬时:时间线上的一个瞬时点。这可能被用来记录应用程序中的事件时间戳,类似于java.util.Date

         //本初子午线对应得时间戳
        Instant ins = Instant.now();
        System.out.println(ins);
        //添加时间的偏移量
        OffsetDateTime offsetDateTime =ins.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);
        //1970开始得毫秒数
       System.out.println( ins.toEpochMilli());
       //获取Instant实例
       System.out.println(Instant.ofEpochMilli(173749L));
    

8.格式化与解析日期或时间

java.time.format.DateTimeFormatter类:该类提供了三种格式化方法:

  • 预定义的标准格式:ISO_LOCAL_DATE_TIME,ISO_LOCAL_DATE,ISO_LOCAL_TIME
  • 本地有关的格式:如fLocalizedDateTime(FormatStyle.LONG)
  • 自定义的格式:如ofPattern("yyyy-MM-dd hh:mm:ss E")

方法:

  • ofPattern(String pattern):静态方法,返回一个指定字符串格式的DateTimeFormatter
  • format(TemporalAccessor t):给实话一个日期,时间,返回字符串
  • parse(CharSequence text):将指定格式的字符序列解析为一个日期,时间
         //DateTimeFormatter:格式化或解析日期,时间,类似于SimpleDateFormat
        //方式一:预定义得标准格式,如
        DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        //格式化:日期--->字符串
        LocalDateTime localDateTime = LocalDateTime.now();
        String str = formatter.format(localDateTime);
        System.out.println(str);
        
        //解析:字符串-->日期
        TemporalAccessor parse = formatter.parse("2019-02-18T15:42:18.797");
        System.out.println(parse);
        
        //方式二:本地化相关的格式
        DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
        //格式化
        String str2 = formatter1.format(localDateTime);
        System.out.println(str2);
        
        
        //方式三:自定义的格式
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String str4 = formatter2.format(LocalDateTime.now());
        System.out.println(str4);
        //解析
        formatter2.parse("2019-04-05");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值