Document

日期工具类

Date 日期类

  该类的含义是具有毫秒精度的特定的时刻。并且这个类中的大多数的方法, 因为不适合国际化, 已经从 JDK1.2 更改为过期注解,相关的方法已经被弃用。

该类的官方定义如下:

public class Date
extends Object
implements Serializable, Cloneable, Comparable<Date>{
}

对于该类的构造函数, 只有两个还没有废弃。

Date(): 分配对象并对其进行初始化,以便它表示分配对象的时间,以最接近的毫秒为单位。

Date(long date): 分配一个对象并对其进行初始化,以表示自称为"纪元"的标准基准时间(即 1970年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。

Date d = new Date();
Date d2 = new Date(long time);

常用方法:
在这里插入图片描述演示代码

package demo;


import java.util.Date;

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/31/10:08
 * @Version
 * @Description
 */
public class Ex4 {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date); // Wed Aug 31 10:11:11 CST 2022
        // 获得Date 的时间轴 返回值是lang类型
        System.out.println(date.getTime()); // 1661911871455

        // 格式化输出
        System.out.printf("%tF:年月日   %<tT:时分秒%n ",date);  //2022-08-31:年月日   10:16:27:时分秒
        // 这里的需要强转long类型
        System.out.printf("%tF:年月日   %<tT:时分秒%n ",1661911871455L);//  2022-08-31:年月日   10:11:11:时分秒
        // Long的最大值
        System.out.printf("%tF:年月日   %<tT:时分秒%n ",Long.MAX_VALUE);// 292278994-08-17:年月日   15:12:55:时分秒

        // 如果我们有Long的值的话就可以这样赋值
        Date d = new Date(1661912187711L);

        // 获取年
        System.out.println(d.getYear());
        System.out.println(d.getYear()+1900);// 2022 这里是正常的
        // 获取月
        System.out.println(d.getMonth()); // 7月
        System.out.println(d.getMonth()+1);// 8月 这里是正常的
        // 获取日
        System.out.println(d.getDate()); //31 这里正确的
        System.out.println(d.getDay()); //3


    }
}

案例:使用java.util.Date 实现计算两个日期之间的天数?
2001-4-24 出生到现在 2022-8-31 有多少?

package demo;

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

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/31/10:23
 * @Version
 * @Description
 */
public class Ex5 {
    public static void main(String[] args) {
        Calculateage(2000, 7, 4);
    }

    public static void Calculateage(int year,int month,int day){
        // 设置自己的出生年月日
        Date date = new Date();
        date.setYear(year-1900);
        date.setMonth(month-1);
        date.setDate(day);

        // 设置今天的日期
        Date date1 = new Date();
        long l = (date1.getTime() - date.getTime())/1000/60/60/24;
        // 格式化输出
        System.out.printf("出生日期%tF %<tT到现在%tF %<tT 一共活了%d天",date,date1,l);

    }
}

在这里插入图片描述

Calendar 日历

import java.util.Calendar; 导入类
对于 Java 中的 Calendar 类, 该类为抽象类, 无法直接进行实例化, 如果想获得该对象, 可以使
用对应的工厂方法。它主要是提供特定时刻和一组日历的字段的转换的方法。以及用于操作日历字段的方法, 比方说:获取下周的日期。
该类和其他的区分区域的类一样, 他提供了一个类静态方法, 可以获取当前的 Calendar 对象信息。

该抽象类的定义如下:

public abstract class Calendar extends Object implements Serializable,
Cloneable, Comparable<Calendar>{
}

以及对应的静态类方法:

public static Calendar getInstance(){
Locale aLocale = Locale.getDefault(Locale.Category.FORMAT);
return createCalendar(defaultTimeZone(aLocale), aLocale);
}
package cn.webrx;
import java.util.Calendar;
import java.util.Date;
public class Calendar1 {
public static void main(String[] args) {
//Calendar是一个抽象类,不允许直接实例化,
//Calendar c = new Calendar();
//getInstance() 是实例化。
Calendar c = Calendar.getInstance();
//c.set();
//c.get();
Date d1 = c.getTime(); //getTime() 方法,功能将当前Calendar实例对象,转换
为Date的实例对象
Date d2 = new Date();
System.out.printf("%tF %<tT%n",d1);
System.out.printf("%tF %<tT%n",d2);
long time = c.getTimeInMillis();//日历返回一个时间戳 是一个long的类型数字
}
}

基础的使用方法:

Calendar calendar = Calendar.getInstance();
System.out.println("当前时间: " + calendar.getTime());
public static final int ERA = 0;
public static final int YEAR = 1;//*****
public static final int MONTH = 2;//*****
public static final int WEEK_OF_YEAR = 3;
public static final int WEEK_OF_MONTH = 4;
public static final int DATE = 5;
public static final int DAY_OF_MONTH = 5;//*****
public static final int DAY_OF_YEAR = 6;
public static final int DAY_OF_WEEK = 7; //
public static final int DAY_OF_WEEK_IN_MONTH = 8;
public static final int AM_PM = 9;
public static final int HOUR = 10;//*****
public static final int HOUR_OF_DAY = 11;
public static final int MINUTE = 12;//*****
public static final int SECOND = 13;//*****
public static final int MILLISECOND = 14;
public static final int ZONE_OFFSET = 15;
public static final int DST_OFFSET = 16;
public static final int FIELD_COUNT = 17;

设置方法: set()

//请计算2001 6 18哪一天是星期?
Calendar c2 = Calendar.getInstance();
c2.set(Calendar.YEAR,2001);
c2.set(Calendar.MONTH,6-1);
c2.set(Calendar.DAY_OF_MONTH,18);
System.out.printf("%tF 这一日期是:%tA%n",c2,c2);

获取方法: get()方法

Calendar c = Calendar.getInstance();
System.out.println(c.get(1)); //传入一个1 返回一个年份 2022
System.out.println(c.get(Calendar.YEAR)); //传入一个1 返回一个年份 2022
System.out.println(c.get(2)+1);//返回月 7
System.out.println(c.get(Calendar.DAY_OF_MONTH)); //11 几号
System.out.println(c.get(5)); //11 几号

Date和Calendar之间的转换

package demo;

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

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/31/10:58
 * @Version
 * @Description Date和Calendar之间的转换
 */
public class Ex6 {
    public static void main(String[] args) {
        // 将Date转换为Calendar类实例
        Date date = new Date();
        date.setYear(2022-1900);
        System.out.printf("%tF %<tT%n",date);

        Calendar c = Calendar.getInstance();
        c.setTime(date);// 此方法是Calendar的设置时间的方法,我们把Date以参数的形式转换为Calendar日历类
        System.out.println(c.getTime());

        // 将Calendar转换为Date
        Calendar c1 = Calendar.getInstance();
        c1.set(Calendar.YEAR,2001);
        c1.set(Calendar.MONTH,4-1);// 这里因为日历类设置的月份是从
        c1.set(Calendar.DAY_OF_MONTH,25);

        Date aa = c1.getTime();
        System.out.printf("%tF %<tT %n",aa);
    }
}

日期之间的天数计算

package demo;

import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/31/14:47
 * @Version
 * @Description
 */
public class Ex7 {
    public static void main(String[] args) {
        LocalDate of = LocalDate.of(2002, 12, 3);
        LocalDate now = LocalDate.now();
        System.out.println(of.toEpochDay()); // 到大纪元   获取这两个数的天数
        System.out.println(now.toEpochDay());
        System.out.println(now.toEpochDay()-of.toEpochDay());// 计算出天数

        // 获取设置时间与现在的时间  的天数 和月数
        LocalDateTime lt = LocalDateTime.of(2002,12,23,21,43,2);
        LocalDateTime le = LocalDateTime.now();
        Duration d = Duration.between(lt,le);
        System.out.println(d.toDays());//7190
        System.out.println(d.toHours());//172577
        System.out.println(d.toString());//PT172577H29M29.957S
    }
}

SimpleDateFormat 格式化类

在这里插入图片描述

package demo;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/31/15:21
 * @Version
 * @Description  简单日期格式类 SimpleDateFormat
 */
public class SimpleDateFormatDemo {
    public static void main(String[] args) {
        // 实例化简单日期格式化 并设置格式化内容
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = new Date();
        String format = sdf.format(d.getTime());
        System.out.println(format);

        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss");
        System.out.println(sdf1.format(d)+".jpg");

        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
        System.out.println(sdf2.format(d));
    }
}

在这里插入图片描述

LocalDate

LocalDate 表示了一个确切的日期,该对象值是不可变的,用起来和LocalTime基本一致。另外要注
意的是这些对象是不可变的,操作返回的总是一个新实例。

package demo;

import java.sql.SQLOutput;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/31/16:01
 * @Version
 * @Description 本地日期演示
 * LocalDate 表示了一个确切的日期,该对象值是不可变的,用起来和LocalTime基本一致。另外要注
 * 意的是这些对象是不可变的,操作返回的总是一个新实例。
 */
public class LocalDateDemo {
    public static void main(String[] args) {
        // DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        // System.out.println(dtf.getLocale());//获取语言环境
        LocalDate ld = LocalDate.now();// 获取系统当前日期
        System.out.println(ld); //2022-08-31
        LocalDate tomorrow = ld.plus(1, ChronoUnit.DAYS); // 添加一天
        System.out.println(tomorrow);// 2022-09-01
        LocalDate yesterday = tomorrow.minusDays(2); // 减去两天
        System.out.println(yesterday);// 2022-08-30

        // 设置时间2022-01-04
        LocalDate independenceDay = LocalDate.of(2022, Month.JANUARY, 4);
        DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();
        System.out.println(dayOfWeek); //TUESDAY  获取星期几?

        // 喜欢的自己研究
        // DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedDate(FormatStyle.MEDIUM) .withLocale(Locale.GERMAN); LocalDate xmas = LocalDate.parse("01.11.2019", germanFormatter); System.out.println(xmas); var d = LocalDate.now(); //d = d.plusDays(35);//日期增加35 //d = d.plus(25, ChronoUnit.MONTHS); d = d.plusDays(-5); System.out.println(d); System.out.println(d.format(DateTimeFormatter.ofPattern("yyyy年MM月dd 日"))); System.out.println(d.getMonth().getDisplayName(TextStyle.FULL, Locale.CHINA));

        // 将字符串转换为LocalDate
        LocalDate d2 = LocalDate.parse("1985-11-23",DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println(d2); //1985-11-23

        // 获取今天的日期
        LocalDate today = LocalDate.now();
        // 今天是几号
        int dayofMonth = today.getDayOfMonth();
        // 今天是周几(返回的是个枚举类型,需要再getValue())
        int dayofWeek = today.getDayOfWeek().getValue();
        // 今天是今年中的第几天
        int dayofYear = today.getDayOfYear();
        // 根据字符串取:
        LocalDate endOfFeb = LocalDate.parse("2018-02-28");
        // 严格按照yyyy-MM-dd验证,02写成2都不行,当然也有一个重载方法允许自己定义格式
        // 取本月第1天:
        LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2018-04-01
        // 取本月第2天:
        LocalDate secondDayOfThisMonth = today.withDayOfMonth(2);
        // 2018-04-02
        // 取本月最后一天,再也不用计算是28,29,30还是31:
        LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
        // 2018-04-30
        // 取下一天:
        LocalDate firstDayOfNextMonth = lastDayOfThisMonth.plusDays(1);
        // 变成了 2018-05-01
        // 取2017年1月第一个周一:
        LocalDate firstMondayOf2017 = LocalDate.parse("2017-01-01") .with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
        // 2017-01-02
        LocalDate today1 = LocalDate.now();
        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        String text = today1.format(formatters);
        System.out.println(text);// 2022年08月31日
    }
}

LocalTime

1、可以通过静态工厂方法of创建一个LocalDate实例
2、同过方法parse 解析时间
3、操作方式和LocalDate类似

DateTimeFormmater 格式化类

DateTimeFormatter
用于LocalDateTime、LocalDate、LocalTime和字符串的转换
DateTimeFormatter通常用来格式化日期和时间,里面预定义了像BASIC_ISO_DATE和
ISO_LOCAL_DATE这样的常量方便格式化。

在这里插入图片描述
在这里插入图片描述

package demo;

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

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/31/19:49
 * @Version
 * @Description
 */
public class Tim {
    public static void main(String[] args) {
        LocalDate d2 = LocalDate.now(); // 实例化  当前日期
        System.out.println(d2);// 输出日期 //2022-08-31
        System.out.println(d2.format(DateTimeFormatter.BASIC_ISO_DATE));// 20220831
        System.out.println(d2.format(DateTimeFormatter.ISO_DATE));// 2022-08-31
        System.out.println(d2.format(DateTimeFormatter.ISO_LOCAL_DATE)); //2022-08-31
        System.out.println(d2.format(DateTimeFormatter.ofPattern("yyyy年MM月 dd日")));// 2022年08月 31日
        System.out.println(d2.format(DateTimeFormatter.ofPattern("E")));// 星期三
        LocalTime t2 = LocalTime.now();
        t2 = LocalTime.of(12, 33, 32); //设置 时分秒
        System.out.println(t2); //12:33:32
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH-mm-ss");// 设置时分秒的格式
        System.out.println(t2.format(dtf));//12-33-32
        LocalDateTime d3 = LocalDateTime.now();//设置当前日期
        DateTimeFormatter d3f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss E");// 设置输出格式化
        System.out.println(d3.format(d3f));// 2022-08-31 19:54:00 星期三
    }
}
posted @ 2022-08-31 19:59  一蓑烟雨任平生。。  阅读(65)  评论(0)    收藏  举报
Document