第二章 日期工具类

第二章 日期工具类

1、掌握日期相关类的使用
java.util;
  • Date 了解
  • Calendar 掌握
分时间案例 日期时间类 if语句 关系运算 逻辑运算
时间戳概念

指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)

起至现在的总秒数,本质是一个long类型的整数,表示日期对象。

java 体系的时间戳是毫秒。

lang包下的所有类,无需导入

java.lang;

JAVA1.8

LocalDate

LocalTime 18:20:30

LocalDateTime 2023-02-09 09:11:20 Date Calender

package cn.practice;

public class TimeStamp {
    public static void main(String[] args) {
        long ss = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
        long ee = System.currentTimeMillis();
        System.out.printf("ms:%d %n", ee - ss);
        System.out.println(System.currentTimeMillis());
        System.out.printf("%tF %<tT%n", 0L);
        //格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)
        System.out.printf("%tF %<tT%n", 1676033611399L);
        //1676033611399L - 时间戳
        //currentTimeMillis()得到当前时间戳
    }
}

在这里插入图片描述

日期工具类
1.java.util.Date

Date 类表示系统特定的时间戳,可以精确到毫秒。

Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。

  • Date()
  • Date(long date)
package cn.practice;

import java.util.Date;

public class StruDate {
    public static void main(String[] args) {
        Date date1 = new Date(); // 调用无参数构造函数
        System.out.println(date1.toString()); // 输出:Fri Feb 10 21:24:05 CST 2023
        Date date2 = new Date(60000); // 调用含有一个long类型参数的构造函数
        System.out.println(date2); // 输出:Thu Jan 01 08:01:00 CST 1970
    }
}
方法描述
boolean after(Date when )判断此日期是否在指定日期之后
boolean before(Date when)判断此日期是否在指定日期之前
int compare To(Date another Date)比较两个日期的顺序
boolean equals(Object obj)比较两个日期的相等性
long getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来 此 Date 对象表示的毫秒数
String toString()把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。 其中 dow 是一周中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及Sat)
package cn.practice;

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

public class StruDate1 {
    public static void main(String[] args) throws ParseException {
        // 2000-12-16    2000.12.16  定义输出格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 将字符串转化为日期
        Date date = sdf.parse("2000-11-11 11:11:11");
        System.out.println(date);//Sat Nov 11 11:11:11 CST 2000

        Date date1 = new Date();
        // 将日期转化为字符串
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String str = sdf1.format(date1);
        System.out.println(str);//2023-02-11 14:30:59

        var now = new Date(); // 创建一个Date对象,获取当前时间
        // 指定格式化格式
        var f = new SimpleDateFormat("今天是 " + "yyyy 年 MM 月 dd 日 E HH 点 mm 分 ss 秒");
        System.out.println(f.format(now));// 将当前时间袼式化为指定的格式
        //今天是 2023 年 02 月 11 日 周六 14 点 33 分 56 秒
    }
}
package cn.practice;

import java.util.Date;

public class StruDate2 {
    public static void main(String[] args) {
        //构造方法 实例化对象
        Date d1 = new Date();
        Date d2 =  new Date(System.currentTimeMillis());
        System.out.println(System.currentTimeMillis());
        Date d3 = new Date(1676097794284L);
        System.out.printf("%tF %<tT%n",d1);
        System.out.printf("%tF %<tT%n",d2);
        System.out.printf("%tF %<tT%n",d3);

        //常用方法
        long now = d1.getTime();
        d1.setTime(now + (1000 * 60 * 60 * 24 * 10));
        //10天后 2023-02-21 14:55:31
        System.out.printf("%tF %<tT%n",d1);

        //计算两个日期之间的天数 1989-10-15出生到目前生活了多少天?
        Date ss = new Date(1989-1900,9,15,8,20,30);
        long t1 = ss.getTime();//1989-10-15 08:20:30
        System.out.printf("%tF %<tT%n",ss);
        System.out.printf("%tF %<tT%n",t1);
        long t2 = System.currentTimeMillis();//2023-02-11 15:17:17
        System.out.printf("%tF %<tT%n",t2);
        System.out.println((t2-t1)/(1000*60*60*24));//12172
    }
}
2.java.util.Calendar

Calendar类是一个抽象类,创建Calendar对象不能使用new关键字,与 YEAR、MONTH、DAY_OF—MONTH、HOUR 、操作日历字段等提供了一些方法。

掌握Calendar类实例化,add() set() get()三大方法

可以用getInstance()方法来获得Calendar类的对象(getInstance()方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化)。

Calendar c = Calendar.getInstance();
方法描述
void add(int field,int amout)给 field 添加或减去指定的时间量 amount
boolean after(Object when)判断 Calendar 表示的时间是否在指定时间 when 之后,并返回结果
boolean before(Object when)判断 Calendar 表示的时间是否在指定时间 when 之前,并返回结果
void clear()清空 Calendar 中的日期时间值
int compare To(Calendar anotherCalendar)比较两个 Calendar 对象表示的时间值(从格林威治时间 1970年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0
int get(int field)返回指定日历字段的值
int getActualMaximum(int field)返回指定日历字段可能拥有的最大值
int getActualMinimum(int field)返回指定日历字段可能拥有的最小值
int getFirstDayOfWeek()获取一星期的第一天。根据不同地区,返回不同值
static Calendar getInstance()使用默认时区和语言坏境获得一个日历
static Calendar getInstance(TimeZone zone)使用指定时区和默认语言环境获得一个日历
static Calendar getInstance(TimeZone zone,Locale aLocale)使用指定时区和语言环境获得一个日历
Date getTime()返回一个表示此 Calendar 时间值(从格林威治时间 1970 年 01月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量)的 Date 对象
long getTimeInMillis()返回此 Calendar 的时间值,以毫秒为单位
void set(int field,int value)为指定的日历字段设置给定值
void set(int year,int month,int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year,int month,int date,int hourOfDay,int miniute,int second)设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value)设置一星期的第一天是哪一天
void setTimeInMillis(long millis)用给定的 long 值设置此 Calendar 的当前时间值

Calendar 对象可以调用 set() 方法将日历翻到任何一个时间,当参数 year 取负数时表示公元前。

Calendar 对象调用 get() 方法可以获取有关年、月、日等时间信息,参数 field 的有效值由 Calendar 静态常量指定。

常量意义
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期
Calendar.HOUR12小时制的小时
Calendar.HOUR_OF_DAY24 小时制的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK星期几
//eg.要获取当前月份
int month = Calendar.getInstance().get(Calendar.MONTH);
实例:使用 Calendar 类处理日期时间
package cn.practice;

import java.util.Calendar;
import java.util.Date;

public class StruCalendarDate {
    public static void main(String[] args) {
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTime(new Date());
        // 将系统当前时间赋值给 Calendar 对象
        System.out.println("现在时刻:" + calendar1.getTime()); //现在时刻:Sat Feb 11 18:13:31 CST 2023

        int year = calendar1.get(Calendar.YEAR);
        System.out.println("现在是" + year + "年");//现在是2023年
        int month = calendar1.get(Calendar.MONTH) + 1; // 获取当前月份(月份从 0 开始,所以加 1)
        System.out.print(month + "月");
        int day = calendar1.get(Calendar.DATE); // 获取日
        System.out.print(day + "日");
        System.out.print(" ");

        int week = calendar1.get(Calendar.DAY_OF_WEEK) - 1; // 获取今天星期几(以星期日为第一天)
        System.out.print("星期" + week);
        System.out.print(" ");
        int hour = calendar1.get(Calendar.HOUR_OF_DAY); // 获取当前小时数(24 小时制)
        System.out.print(hour + "时");
        int minute = calendar1.get(Calendar.MINUTE);
        System.out.print(minute + "分");
        int second = calendar1.get(Calendar.SECOND);
        System.out.print(second + "秒");
        int millisecond = calendar1.get(Calendar.MILLISECOND);
        System.out.print(millisecond + "毫秒");
        System.out.print(" ");

        int dayOfMonth = calendar1.get(Calendar.DAY_OF_MONTH); // 获取今天是本月第几天
        System.out.println("今天是本月的第 " + dayOfMonth + " 天");//今天是本月的第 11 天
        int dayOfWeekInMonth = calendar1.get(Calendar.DAY_OF_WEEK_IN_MONTH);// 获取今天是本月第几周
        System.out.println("今天是本月第 " + dayOfWeekInMonth + " 周");
        int many = calendar1.get(Calendar.DAY_OF_YEAR); // 获取今天是今年第几天
        System.out.println("今天是今年第 " + many + " 天");

        Calendar c = Calendar.getInstance();
        c.set(2012, 8, 8); // 设置年月日,时分秒将默认采用当前值
        System.out.println("设置日期为 2012-8-8 后的时间:" + c.getTime());
        //设置日期为 2012-8-8 后的时间:Sat Sep 08 18:21:30 CST 2012
    }
}

在这里插入图片描述

设置-7天,获取7天前的日期
package cn.practice;

import java.util.Calendar;
import java.util.Date;

public class StruCalendarDate1 {
    public static void main(String[] args) {
        //获取实例对象
        var c = Calendar.getInstance();
        //c.set();c.get();
        System.out.println(c.get(Calendar.HOUR_OF_DAY));
        System.out.println(new Date().getHours());
        //c.add();  设置-7天,获取7天前的日期
        c.add(Calendar.DATE,-7);

        //日历类转换为Date类
        Date d=c.getTime();
        System.out.printf("%tF %<tT%n",d);
        //日历类获取时间戳
        long ts =  c.getTimeInMillis();
        System.out.printf("%tF %<tT%n",ts);
        System.out.printf("%tF %<tT%n",c);
    }
}

在这里插入图片描述

2、计算2023-1-1 这一天是星期几?
package cn.practice;

import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;

public class CalDataisWeek {
    public static void main(String[] args) {
        var data01 = LocalDate.of(2023,1,1);
        var dayisweek = data01.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINESE);
        System.out.printf("%tF这一天是%<tA",data01);
    }
}

在这里插入图片描述

3、掌握LocalDate使用,掌握LocalDate、LocalTime、LocalDateTime类的format格式化方法()

java.time.*;

LocalDate dd = Local

java8 DateAPI
  • LocalDate

    • jdk1.8 新的日期API

      java.time.LocalDate类

      java.util.Date Calendar

      此类只有年月日

package cn.practice;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.time.temporal.ChronoUnit;
import java.util.Locale;

public class StruLocalDate {
    public static void main(String[] args) {
        //实例化
        LocalDate d1=LocalDate.now();
        var d2 = LocalDate.of(1985,10,17);

        //常用操作 c++  今日5天后日期
        System.out.println(d1.plusDays(5));
        //今日3天前日期
        System.out.println(d1.minusDays(3));
        //今日25个月后的新日期
        System.out.println(d1.plus(25, ChronoUnit.MONTHS));

        //今日日期的月份 中文效果: 十月
        var daymonth = d1.getMonth().getDisplayName(TextStyle.FULL, Locale.CHINESE);
        System.out.println(daymonth);

        var dayweek = d1.getDayOfWeek().getDisplayName(TextStyle.FULL,Locale.CHINESE);
        System.out.println(dayweek);

        var dayweek1 = d1.getDayOfWeek().getDisplayName(TextStyle.SHORT,Locale.CHINESE);
        System.out.println(dayweek1);

        System.out.println("----------------");
        //计算两个日期之间的天数
        long days = ChronoUnit.DAYS.between(d2,d1);
        System.out.printf("%s 到 %s 之间有 %d 天",d2,d1,days);
        System.out.println();
        //格化输出
        System.out.println(d1);
        System.out.println(d2);
        System.out.printf("%tF%n",d1);
        System.out.printf("%tF%n",d2);
        System.out.printf("%tY年%<tm月%<td日 %<tA%n",d1);
        System.out.printf("%tY年%<tm月%<td日 %<tA%n",d2);
        System.out.println(d1.isLeapYear());
        //专业的格式工具类java.time.DateTimeFormatter
        var fmt = DateTimeFormatter.ofPattern("yyyy年MM月dd日 E M L");
        var fmt1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 E M L",Locale.CHINA);
        System.out.println(fmt.format(d1));
        System.out.println(fmt.format(d2));
        System.out.println(fmt1.format(d1));
        System.out.println(fmt1.format(d2));
    }
}

在这里插入图片描述

  • LocalTime

    LocalTime本地化时间 只有时分秒 没有日期

package cn.practice;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class StruLocalTime {
    public static void main(String[] args) {
        //LocalTime 实例化
        var t1 = LocalTime.now();
        var t2 = LocalTime.of(14, 30, 20);
        var t3 = LocalTime.parse("19:23:25", DateTimeFormatter.ofPattern("HH:mm:ss"));

        //简单输出
        System.out.println(t1);//08:44:09.385507600
        System.out.printf("%tT%n", t1);//08:44:09
        System.out.println(t2);//14:30:20
        System.out.println(t3);//19:23:25

        //格式化输出
        DateTimeFormatter df = DateTimeFormatter.ofPattern("HH时mm分ss秒");
        System.out.println(df.format(t1));
        System.out.println(df.format(t2));
        System.out.println(df.format(t3));
        System.out.println(t1.plusSeconds(1000));
        //把1000秒加到t1中

        var sns = t1.plusSeconds(1000).format(DateTimeFormatter.ofPattern("HH:mm:ss"));
        System.out.println(sns);
        //把1000秒加到t1中  格式化输出

        LocalTime time = LocalTime.now();
        System.out.println(time);
        System.out.printf("%tT%n", time);
        System.out.printf("%tH时%<tM分%<tS秒%n", time);
        System.out.println(time.format(DateTimeFormatter.ofPattern("HH:mm:ss")));
    }
}

在这里插入图片描述

LocalDateTime

包含了年月日时分秒相关信息,相当于LocalDateTime = LocalDate + LocalTime

相当于以前的java.util.Date,也相当于java.util.Calendar类

package cn.practice;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;

public class StruLocalDateTime1 {
    public static void main(String[] args) {
        var d1= LocalDateTime.now();
        System.out.println(d1);
        System.out.printf("%tF %<tT %n",d1);
        System.out.printf("%tF%n",d1);
        System.out.printf("%tT%n",d1);
        System.out.printf("%tY年%<tm月%<td日 %<tH:%<tM:%<tS %<tA %<tp %s %n",d1,d1.getMonth().getDisplayName(TextStyle.FULL, Locale.CHINA));

        //将字符串转换为LocalDateTime
        var d2=LocalDateTime.of(2022,10,17,14,49,50);
        System.out.println(d2);
        System.out.println(d2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

        String str="2022-03-15 20:30:40";
        var d3=LocalDateTime.parse(str,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(d3);
     }
}

在这里插入图片描述

java.time.LocalDateTime & java.time.DateTimeFormatter
package cn.practice;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

public class StruLocalDateTime2 {
    //private static LocalDateTime date;

    public static void main(String[] args) {
        //java.time.LocalDateTime & java.time.DateTimeFormatter
        //获取一天的开始时间
        //LocalDate now = LocalDate.now();
        //var ss= LocalDateTime.of(now, LocalTime.MIN);
        LocalDate date = LocalDate.of(2023,2,18);
        var ss= LocalDateTime.of(date, LocalTime.MIN);
        System.out.println("--------------");
        System.out.println(ss);//2023-02-18T00:00
        System.out.println(ss.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));//2023-02-18 00:00:00

        //获取一天的结束时间
       //var endOfTheDay = LocalDateTime.of(now,LocalTime.MAX);
        var endOfTheDay = LocalDateTime.of(date,LocalTime.MAX);
        System.out.println(endOfTheDay);//2023-02-18T23:59:59.999999999
        System.out.println(endOfTheDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));//2023-02-18 23:59:59

        //将LocalDateTime 对象  获取 毫秒时间戳
        long ms = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        System.out.println(ms);//1676707914598
        System.out.println(System.currentTimeMillis());//1676707914599
        System.out.printf("%tF %<tT%n",LocalDateTime.now());//2023-02-18 16:11:54

        //获取系统毫秒  时间戳
        long mm = Instant.now().toEpochMilli();

        Date d = new Date(ms);
        System.out.printf("%tF %<tT%n",d);//2023-02-18 16:11:54

        Calendar c=Calendar.getInstance();
        c.setTimeInMillis(1676368128327L);
        System.out.printf("%tF %<tT%n",c);//2023-02-14 17:48:48
    }
}
4、计算两个日期之间有多少天?
package cn.practice;

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class StruLocalDateTime {
    public static void main(String[] args) {
        //计算两个日期之间的天数
        LocalDateTime a = LocalDateTime.of(2001,10,5,8,0,0);
        LocalDateTime b = LocalDateTime.now();
        long days = ChronoUnit.DAYS.between(a,b);
        System.out.printf("%tF %<tT到%tF %<tT 之间有%d天",a,b,days);
        //2001-10-05 08:00:00到2023-02-11 19:37:03 之间有7799天
    }
}
5、给出一个年份,判断这一年是不是闰年?
//2013 是不是闰年?
int year = 2020;
String info = LocalDate.of(year, 1, 1).isLeapYear() ? "闰年" : "平年";
System.out.println(info);
//if语句判断是不是闰年
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
System.out.println("闰年");
} else {
System.out.println("平年");
}
String s = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0) ? "闰年" :
"平年";
System.out.println(s);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hutool的日期工具类是其中一个常用的类辅助工具之一。它提供了一系列方便的方法来处理日期和时间相关的操作。日期工具类具有以下特点: 1. 可以灵活地处理日期和时间的格式化和解析。 2. 可以进行日期的计算和比较,例如计算两个日期之间的天数或小时数差距。 3. 可以对日期进行加减操作,例如增加几天或减去几小时。 4. 可以获取当前日期和时间,以及获取特定日期的年、月、日、小时、分钟、秒等信息。 日期工具类的使用非常简单,你可以使用DateTime类来进行日期相关的操作。DateTime类继承自java.util.Date,因此可以替代原生的Date类的使用,并且还提供了许多其他实用的方法。 例如,你可以使用DateTime的now()方法获取当前日期和时间,使用format()方法将日期格式化为指定的格式,使用parse()方法将字符串解析为日期对象,使用plusDays()方法增加指定的天数等等。 总的来说,Hutool的日期工具类提供了丰富的方法和功能,可以方便地处理日期和时间相关的操作。您可以根据具体的需求选择使用适合的方法来简化您的开发工作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Hutool使用指南(一):时间日期工具](https://blog.csdn.net/C18298182575/article/details/131008226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [hutool 工具类](https://download.csdn.net/download/LiHaoYang11/12153632)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值