Java-日期类(Date、Calendar、LocalDate...)

第一代日期类(java.util.Date)

1)Date:精确到毫秒,代表特定的瞬间;

2)SimpleDateFormat:格式和解析日期类SimpleDateFormat格式化和解析日期具体类。它允许进行格式化(日期转文本)、解析(文本转日期)和规范化;

Date类实现了Cloneable接口、Comparable接口、Serializable接口,继承Object类;

package com.pero.date_;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author Pero
 * @version 1.0
 */
public class Date01 {
    public static void main(String[] args) throws ParseException {

        //该Date是java.util包下的
        //默认输出日期格式是国外方式的,通常要对该日期格式进行转换
        //1.获取当前时间
        Date d1 = new Date();
        System.out.println("当前日期为:"+d1);

        //2.创建一个SimpleDateFormat对象,可以指定格式
        //指定格式所使用的字母是规定好的,不能更改
        //G  Era标志符  Text  AD
        //y  年         Year  1996;96
        //M  年中的月份  Month  July;jul;07
        //w  年中的周数  Number  27
        //D  年终的天数  Number  189
        //d  月份中的天数  Number  10
        //F  月份中的星期  Number  2
        //E  星期中的天数  Text  Tuesday;Tue
        //a  Am/Pm标记  Text  PM
        //H  一天中的小时数(0~23)  Number  0
        //k  一天中的小时数(1~24)  Number  24
        //K  am/pm中的小时数(0~11)  Number  0
        //h  am/pm中的小时数(1~12)  Number  12
        //m  小时中的分钟数  Number  30
        //s  分钟中的秒数  Number 55
        //S  毫秒数  Number  978
        //z  时区  General time zone  Pacific Standard Time;PST;GMT-08:00
        //Z  时区  RFC 822 time zone  -0800
        SimpleDateFormat simpleDateFormat =
                new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
        //3.format()方法,将格式化日期赋值给字符串
        String format = simpleDateFormat.format(d1);
        //4.输出格式化后的当前日期
        System.out.println("当前日期为:"+format);

        Date d2 = new Date(999999999);  //通过指定毫秒数得到时间
        String date = simpleDateFormat.format(d2);
        System.out.println("通过毫秒数得到的时间为"+date);


        //parse()方法,可以把一个格式化的String转成对应的Date
        //直接输出日期都是使用国外格式,通过转换格式可以输出国内格式
        String s = "1969年12月20日 06:13:20 星期六";
        //在把String->Date,使用的格式是simpleDateFormat的格式,
        // 文本格式必须与SimpleDateFormat定义的格式完全相同,
        // 否则抛出转换异常throws ParseException
        Date parse = simpleDateFormat.parse(s);
        System.out.println("parse="+parse);
    }
}

第二代日期类(java.util.Calendar)

1)第二代日期类,主要是Calendar类(日历)。

      public abstract class Calendar extends Object implements Serializable,Cloneable,

Comparable<Calendar>

2)Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历,字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

package com.pero.date_;


import java.util.Calendar;

/**
 * @author Pero
 * @version 1.0
 */
public class Calendar_ {
    public static void main(String[] args) {

        //Calendar 类是一个抽象类,构造器是protect的
        //可以通过getInstance()来获取实例
        //提供大量的方法和字段可使用

        //创建日历类对象
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);

        //获取日历对象的某个日历字段
        System.out.println("年:"+calendar.get(Calendar.YEAR));
        //因为Calendar返回月份时是从0开始编号的,输出月份时需要+1
        System.out.println("月:"+(calendar.get(Calendar.MONTH)+1));
        System.out.println("日:"+calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println("小时"+calendar.get(Calendar.HOUR));
        System.out.println("分钟:"+calendar.get(Calendar.MINUTE));
        System.out.println("秒:"+calendar.get(Calendar.SECOND));

        //Calendar没有专门的格式化方法,需要自己来组合显示
        System.out.println(calendar.get(Calendar.YEAR)+"年"+
                (calendar.get(Calendar.MONTH)+1)+"月"+
                calendar.get(Calendar.DAY_OF_MONTH)+"日"+"\t"+
                //如果显示24小时格式的将Calendar.HOUR->Calendar.HOUR_OF_DAY
                calendar.get(Calendar.HOUR)+":"+
                calendar.get(Calendar.MINUTE)+":"+
                calendar.get(Calendar.SECOND));

    }
}

第三代日期类(LocalDate、LocalTime、LocalDateTime)

★前两代日期类的不足

JDK1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后被弃用了。而Calendar也存在的问题是:

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

2)偏移性:Date中的年份是从1900年开始的,二月份都是从0开始的。

3)格式化:格式化只对Date有用,Calendar则没有。

4)Date类和Calendar类也不是线程安全的;并且不能处理闰秒等问题(每隔两天多出一秒)。

第三代日期常用方法:

1)LocalDate(日期/年月日)、LocalTime(时间/时分秒)、LocalDateTime(日期时间/年月日时分秒)

      LocalDate只包含日期,可以获取日期字段;

      LocalTime只包含时间,可以获取时间字段;

      LocalDateTime包含日期+时间,可以获取日期和时间段。

2)DateTimeFormatter格式日期类

      类似于simpleDateFormat

      DateTimeFormatter dtf = DateTimeFormatter.ofPatttern(格式);

      String str = dtf.format(日期对象);

3)Instant 时间戳

      类似于Date,提供了一系列和Date类转换的方式

      Instant -> Date:

      Date fate = Date.form(instant);  //直接使用Date类的静态方法form()

      Date -> Instant

      Instant instant = date.toInstant();  //date对象使用Date类的方法toInstant()方法

4)第三代日期类更多方法

  • LocalDateTime类
  • MonthDay类:检查重复事件
  • 是否闰年
  • 增加日期的某个部分
  • 使用plus()方法测试增加时间的某个部分
  • 使用minus()方法测试查看一年前和一年后的日期
package com.pero.date_;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * @author Pero
 * @version 1.0
 */
public class LocalDate_ {
    public static void main(String[] args) {

        //now()方法,返回表示当前日期时间的对象
        LocalDateTime localDateTime =
                LocalDateTime.now();//LocalDate.now();//LocalTime.now();
        System.out.println(localDateTime);

        System.out.println("年:"+localDateTime.getYear());
        System.out.println("月:"+localDateTime.getMonth());
        System.out.println("月:"+localDateTime.getMonthValue());
        System.out.println("日:"+localDateTime.getDayOfMonth());
        System.out.println("时:"+localDateTime.getHour());
        System.out.println("分:"+localDateTime.getMinute());
        System.out.println("秒:"+localDateTime.getSecond());


        LocalDate localDate = LocalDate.now();
        System.out.println(localDate);
        System.out.println(localDate.getYear());
        System.out.println(localDate.getMonthValue());
        System.out.println(localDate.getDayOfMonth());

        LocalTime localTime = LocalTime.now();
        System.out.println(localTime);
        System.out.println(localTime.getHour());
        System.out.println(localTime.getMinute());
        System.out.println(localTime.getSecond());

        //使用DateTimeFormatter 对象来进行格式化
//        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日  HH:mm:ss");
//        String format = dateTimeFormatter.format(localDateTime);
//        System.out.println("格式化后的日期:"+format);

        //Instant 时间戳
        Instant instant = Instant.now();  //获取当前日期
        System.out.println(instant);
        //Instant -> Date:
        Date date = Date.from(instant);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd  hh:mm:ss");
        String format1 = simpleDateFormat.format(date);
        System.out.println(format1);

        //Date -> Instant:
        Instant instant1 = date.toInstant();

        //提供plus()方法和minus()方法,可以对当前时间进行加或者减
        //查看800天后是什么时候,输出年月日时分秒
        LocalDateTime localDateTime1 = localDateTime.plusDays(800);
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");//定义输出格式
        String format = dateTimeFormatter.format(localDateTime1);//确认输出内容
        System.out.println("800天后的日期:"+format);//打印输出结果

        //查看123456分钟前是什么时间,输出年月日时分秒
        LocalDateTime localDateTime2 = localDateTime.minusMinutes(123456);
        System.out.println("123456分钟前的日期是:"+dateTimeFormatter.format(localDateTime2));
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值