第十一章_Java中的Date_Calendar_LocalDateTime日期类及SimpleDateFormat时间格式化类大总结

全面解析Java中Date、Calendar、LocalDateTime、SimpleDateFormat等类的使用,包括构造方法、常用方法、日期格式化与解析,以及JDK1.8新增时间日期类的操作。

第十一章_Java中的Date_Calendar_LocalDateTime日期类及SimpleDateFormat时间格式化类大总结

1. Date类的学习(jdk7)

1.1 Date类
  • 概述

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

  • 单位毫秒

    1秒 = 1000 毫秒

​ 可以测试代码的效率

​ System.currentTimeMills() --> 获取当前系统毫秒值

  • 计算机中的时间原点(国际基准时间) 1970年1月1日 0时0分0秒

​ 中国标准时间 = 世界标准时间+8小时(中国在东8区)

  • 地理知识:
0度经线-->本初子午线    

北京在地球上的经纬度:  东经116  北纬 40度   

15度:代表是1个时区,一个小时            我们所在时区:东8区
1.2 构造方法

Date类构造方法

方法名说明
public Date()分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
public Date(long date)分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数

代码演示:

public class Test {
    public static void main(String[] args) {
        //利用空参构造创建Date对象
        //date是当前的系统时间,默认格式是欧洲时间格式
        Date date1 = new Date();
        System.out.println(date1);

        //利用有参构造创建Date对象
        //表示从标准基准时间起指定的毫秒数
        Date date2 = new Date(2000L);
        System.out.println(date2);
    }
}

执行效果:

在这里插入图片描述

1.3 常用方法

常用方法

方法名说明
public long getTime()获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
public void setTime(long time)设置时间,给的是毫秒值

代码演示:

public class Test {
    public static void main(String[] args) {
        //date是当前的系统时间,默认格式是欧洲时间格式
        Date date = new Date();
        System.out.println(date);
        //获取当前时间的系统毫秒值
        long time = date.getTime();
        System.out.println(time);

        System.out.println("---------------");

        Date date1 = new Date();
        //以时间原点为基准,按照毫秒值设置当前系统时间
        date1.setTime(1000L);
        System.out.println(date1);
    }
}

执行效果:

在这里插入图片描述

2. SimpleDateFormat类

2.1概述
  • SimpleDateFormat类概述

    SimpleDateFormat extends DateFormat

​ SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。

​ 我们重点学习日期格式化和解析

2.2 构造方法

SimpleDateFormat类构造方法

方法名说明
public SimpleDateFormat()构造一个SimpleDateFormat,使用默认模式和日期格式
public SimpleDateFormat(String pattern)构造一个SimpleDateFormat使用给定的模式和默认的日期格式

pattern的格式

字母不能乱写,字母之间的符号可以随便写
年 y
月 M
日 d
时 H
分 m
秒 s
比如:
yyyy-MM-dd HH:mm:ss

2.3常用方法

SimpleDateFormat类的常用方法

  • 格式化(从Date到String)
    • public final String format(Date date):将日期格式化成日期/时间字符串
  • 解析(从String到Date)
    • public Date parse(String source):从给定字符串的开始解析文本以生成日期

代码演示:

public class Test {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");

        //格式化
        format(sdf);

        //解析方法
        parse(sdf);

    }

    public static void parse(SimpleDateFormat sdf) throws ParseException {
        //定义字符串
        String s = "2020:01:01 01:01:01";
        Date date = sdf.parse(s);
        System.out.println(date);
    }

    public static void format(SimpleDateFormat sdf) {
        //创建Date对象
        Date date = new Date();
        System.out.println(date);
        //格式化
        String format = sdf.format(date);
        System.out.println(format);
        System.out.println("----------------------------");

    }
}

执行效果:

在这里插入图片描述

注意事项:

在这里插入图片描述

3. JDK1.8时间日期类

3.1JDK8新增日期类
  • LocalDate 表示日期(年月日)
  • LocalTime 表示时间(时分秒)
  • LocalDateTime 表示 日期 + 时间(年月日时分秒)
3.2 LocalDateTime创建方法
  • 方法说明(这个类不能直接创建对象,需要调用方法来创建)
方法名说明
public static LocalDateTime now()获取当前系统时间
public static LocalDateTime of (年, 月 , 日, 时, 分, 秒)使用指定年月日和时分秒初始化一个LocalDateTime对象

不能创建对象的原因,构造方法私有化,只能通过内部方法调用时创建

在这里插入图片描述

代码演示:

public class Test {
    public static void main(String[] args) {
        //获取当前系统的时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);

        //创建对象时直接初始化年月日时分秒
        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
        System.out.println(localDateTime);
    }
}

执行效果:

在这里插入图片描述

3.3 LocalDateTime获取方法

方法说明

方法名说明
public int getYear()获取年
public int getMonthValue()获取月份(1-12)
public int getDayOfMonth()获取月份中的第几天(1-31)
public int getDayOfYear()获取一年中的第几天(1-366)
public DayOfWeek getDayOfWeek()获取星期
public int getMinute()获取分钟
public int getHour()获取小时

代码演示:

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 20);
        //public int getYear()           获取年
        int year = localDateTime.getYear();
        System.out.println("年为" +year);
        //public int getMonthValue()     获取月份(1-12)
        int month = localDateTime.getMonthValue();
        System.out.println("月份为" + month);

        Month month1 = localDateTime.getMonth();
//        System.out.println(month1);

        //public int getDayOfMonth()     获取月份中的第几天(1-31)
        int day = localDateTime.getDayOfMonth();
        System.out.println("日期为" + day);

        //public int getDayOfYear()      获取一年中的第几天(1-366)
        int dayOfYear = localDateTime.getDayOfYear();
        System.out.println("这是一年中的第" + dayOfYear + "天");

        //public DayOfWeek getDayOfWeek()获取星期
        DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
        System.out.println("星期为" + dayOfWeek);

        //public int getMinute()        获取分钟
        int minute = localDateTime.getMinute();
        System.out.println("分钟为" + minute);
        //public int getHour()           获取小时

        int hour = localDateTime.getHour();
        System.out.println("小时为" + hour);
    }
}

执行效果:

在这里插入图片描述

3.4 LocalDateTime转换方法

方法说明

方法名说明
public LocalDate toLocalDate ()转换成为一个LocalDate对象
public LocalTime toLocalTime ()转换成为一个LocalTime对象

代码演示:

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.of(2020, 12, 12, 8, 10, 12);
        //public LocalDate toLocalDate ()    转换成为一个LocalDate对象
        LocalDate localDate = localDateTime.toLocalDate();
        System.out.println(localDate);

        //public LocalTime toLocalTime ()    转换成为一个LocalTime对象
        LocalTime localTime = localDateTime.toLocalTime();
        System.out.println(localTime);
    }
}

执行效果:

在这里插入图片描述

3.5 LocalDateTime格式化和解析

方法说明

方法名说明
public String format (指定格式)把一个LocalDateTime格式化成为一个字符串
public LocalDateTime parse (准备解析的字符串, 解析格式)把一个日期字符串解析成为一个LocalDateTime对象
public static DateTimeFormatter ofPattern(String pattern)使用指定的日期模板获取一个日期格式化器DateTimeFormatter对象

代码演示:

public class Test {
    public static void main(String[] args) {
        //时间格式化
        method1();
        
        //解析字符串时间
        method2();
    }

    //解析字符串时间
    private static void method2() {
        //public static LocalDateTime parse (准备解析的字符串, 解析格式) 把一个日期字符串解析成为一个LocalDateTime对象
        String s = "2020年11月12日 13:14:15";
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        LocalDateTime parse = LocalDateTime.parse(s, pattern);
        System.out.println(parse);
    }

    //时间格式化
    private static void method1() {
        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 12, 13, 14, 15);
        System.out.println(localDateTime);
        //public String format (指定格式)   把一个LocalDateTime格式化成为一个字符串
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        String s = localDateTime.format(pattern);
        System.out.println(s);
        System.out.println("-------------------------");
    }
}

执行效果:

在这里插入图片描述

3.6 LocalDateTime增加或者减少时间的方法

方法说明

方法名说明
public LocalDateTime plusYears (long years)添加或者减去年
public LocalDateTime plusMonths(long months)添加或者减去月
public LocalDateTime plusDays(long days)添加或者减去日
public LocalDateTime plusHours(long hours)添加或者减去时
public LocalDateTime plusMinutes(long minutes)添加或者减去分
public LocalDateTime plusSeconds(long seconds)添加或者减去秒
public LocalDateTime plusWeeks(long weeks)添加或者减去周

代码演示:

public class Test {
    public static void main(String[] args) {
        //public LocalDateTime plusYears (long years)   添加或者减去年

        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
        //添加一年
        LocalDateTime newLocalDateTime1 = localDateTime.plusYears(1);
        System.out.println(newLocalDateTime1);
        System.out.println("----------------------");

        //减去一年
        LocalDateTime newLocalDateTime2 = localDateTime.plusYears(-1);
        System.out.println(newLocalDateTime2);
    }
}

执行效果:

在这里插入图片描述

3.7 LocalDateTime减少或者增加时间的方法

方法说明

方法名说明
public LocalDateTime minusYears (long years)减去或者添加年
public LocalDateTime minusMonths(long months)减去或者添加月
public LocalDateTime minusDays(long days)减去或者添加日
public LocalDateTime minusHours(long hours)减去或者添加时
public LocalDateTime minusMinutes(long minutes)减去或者添加分
public LocalDateTime minusSeconds(long seconds)减去或者添加秒
public LocalDateTime minusWeeks(long weeks)减去或者添加周

代码演示:

public class Test {
    public static void main(String[] args) {
        //public LocalDateTime minusYears (long years)  减去或者添加年
        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);

        //减去一年
        LocalDateTime newLocalDateTime1 = localDateTime.minusYears(1);
        System.out.println(newLocalDateTime1);
        System.out.println("---------------------------");

        //添加一年
        LocalDateTime newLocalDateTime2 = localDateTime.minusYears(-1);
        System.out.println(newLocalDateTime2);

    }
}

执行效果:

在这里插入图片描述

3.8 LocalDateTime修改方法

方法说明

方法名说明
public LocalDateTime withYear(int year)直接修改年
public LocalDateTime withMonth(int month)直接修改月
public LocalDateTime withDayOfMonth(int dayofmonth)直接修改日期(一个月中的第几天)
public LocalDateTime withDayOfYear(int dayOfYear)直接修改日期(一年中的第几天)
public LocalDateTime withHour(int hour)直接修改小时
public LocalDateTime withMinute(int minute)直接修改分钟
public LocalDateTime withSecond(int second)直接修改秒

代码演示:

public class Test {
    public static void main(String[] args) {
        //public LocalDateTime withYear(int year)   修改年

        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);

        //修改年
        LocalDateTime newLocalDateTime1 = localDateTime.withYear(2048);
         System.out.println(newLocalDateTime1);
        System.out.println("-------------------------");

         //修改月
        LocalDateTime newLocalDateTime2 = localDateTime.withMonth(10);
        System.out.println(newLocalDateTime2);

    }
}

执行效果:

在这里插入图片描述

3.9 Period

方法说明

方法名说明
public static Period between(开始时间,结束时间)计算两个“时间"的间隔
public int getYears()获得这段时间的年数
public int getMonths()获得此期间的总月数
public int getDays()获得此期间的天数
public long toTotalMonths()获取此期间的总月数

代码演示:

public class Test {
    public static void main(String[] args) {
        //public static Period between(开始时间,结束时间)  计算两个"时间"的间隔

        LocalDate localDate1 = LocalDate.of(2020, 1, 1);
        LocalDate localDate2 = LocalDate.of(2048, 12, 12);
        Period period = Period.between(localDate1, localDate2);
        System.out.println(period);//P28Y11M11D

        //public int getYears()         获得这段时间的年数
        System.out.println(period.getYears());//28
        //public int getMonths()        获得此期间的月数
        System.out.println(period.getMonths());//11
        //public int getDays()          获得此期间的天数
        System.out.println(period.getDays());//11

        //public long toTotalMonths()   获取此期间的总月数
        System.out.println(period.toTotalMonths());//347

    }
}

执行效果:

在这里插入图片描述

3.10 Duration

方法说明

方法名说明
public static Durationbetween(开始时间,结束时间)计算两个“时间"的间隔
public long toSeconds()获得此时间间隔的秒
public int toMillis()获得此时间间隔的毫秒
public int toNanos()获得此时间间隔的纳秒

代码演示:

public class Test {
    public static void main(String[] args) {
        //public static Duration between(开始时间,结束时间)  计算两个“时间"的间隔

        LocalDateTime localDateTime1 = LocalDateTime.of(2020, 1, 1, 13, 14, 15);
        LocalDateTime localDateTime2 = LocalDateTime.of(2020, 1, 2, 11, 12, 13);
        Duration duration = Duration.between(localDateTime1, localDateTime2);
        System.out.println(duration);//PT21H57M58S
        //public long toSeconds()	       获得此时间间隔的秒
        System.out.println(duration.toSeconds());//79078
        //public int toMillis()	           获得此时间间隔的毫秒
        System.out.println(duration.toMillis());//79078000
        //public int toNanos()             获得此时间间隔的纳秒
        System.out.println(duration.toNanos());//79078000000000
    }
}

执行效果:

在这里插入图片描述

LocalDate和LocalTime具有和LocalDateTime基本相同的方法.

4. Calendar日历类

4.1 概述

​ Calendar 类是一个抽象类,提供了很方便的不同日期格式的处理

4.2 获取对象

​ 需要子类:GregorianCalendar–>一般我们不用

​ 一般获取对象直接调用 getInstance方法

​ static Calendar getInstance() ->获取Calendar对象->代表的是子类对象

4.3 月份说明

​ 0 1 2 3 4 5 6 7 8 9 10 11–>国外
​ 1 2 3 4 5 6 7 8 9 10 11 12–>中国

4.4 常用方法
方法名说明
public int get(int field)返回指定的日历字段的值
public void set(int field,int value)将给定的日历字段设置为指定的值
public void add(int field,int amount)根据日历的规则,为给定的日历字段添加
或者减去指定的时间量
public Date getTime()返回一个表示此Calendar时间值
(从历元到现在的毫秒偏移量)的Date对象

其他:

field:日历字段–>static–>类名直接调用
​ YEAR 年
​ MONTH 月(从0开始,可以+1使用)
​ DAY_OF_MONTH 月中的天(几号)
​ HOUR 时(12小时制)
​ HOUR_OF_DAY 时(24小时制)
​ MINUTE 分
​ SECOND 秒
​ DAY_OF_WEEK 周中的天(周几,周日为1,可以-1使用)

代码演示:

public class Test {
    public static void main(String[] args) {
        //获取Calendar对象
        getCalendar();
        System.out.println("-----------------------");
//        get方法,获取指定的年月日
        get();
        System.out.println("------------------------");
//        set方法,设置指定的年月日
        set();
        System.out.println("------------------------");
//        add方法,对指定日期的年月日进行增减操作
        add();
    }

    private static void add() {
        //获取Calendar对象
        Calendar calendar = Calendar.getInstance();
        //给指定的年份加2年
        //calendar.add(Calendar.YEAR,2);

        //给指定的年份减2年
       // calendar.add(Calendar.YEAR,-2);
        //int i = calendar.get(Calendar.YEAR);//获取年份

        //给指定的月份加1月
        calendar.add(Calendar.MONTH,10);//0-11
        int i = calendar.get(Calendar.MONTH);//获取月份
        System.out.println(i);
    }

    public static void set() {
       //获取Calendar对象
        Calendar calendar = Calendar.getInstance();
        //设置年份
        //calendar.set(Calendar.YEAR,2021);
        //int i = calendar.get(Calendar.YEAR);//获取年份

        //设置月份
        calendar.set(Calendar.MONTH,2);
        int i = calendar.get(Calendar.MONTH);//获取月份
        System.out.println(i);

    }

    private static void get() {
        //获取Calendar对象
        Calendar calendar = Calendar.getInstance();
        //int i = calendar.get(Calendar.YEAR);获取年
        int i = calendar.get(Calendar.MONTH);//获取月份
        System.out.println(i);
    }

    public static void getCalendar() {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
    }
}

执行效果:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值