Java--Data类

1.Data类

复制代码
java.util.Date.表示指定的时间信息,不支持国际化
构造方法
new Date():当前系统日期和时间
new Date(long):给定日期和时间
主要方法:
after(Date):判断当前日期对象是否在给定日期对象之后
before(Date):判断当前日期对象是否在给定日期对象之前
equals(Object):判断两个日期是否相等
compareTo(Date):比较两个日期的顺序,如果当前日期对象大于给定日期对象,返回正数,如果小于
给定日期对象,返回负数,如果等于给定日期对象,返回零

2. DataFormat

对日期类进行格化式和解析

DateFormat本身是一个抽象类,实例化的方式

一种是通过静态方法的调用,处理的是长日期和长时间类型

1.getDateInstance()

2.getTimeInstance()

3.getDateTimeInstance()

一种是通过创建子类对象

创建SimpleDateFormat对象,处理的是短日期和短时间类型

可以自定义格式

|----|---------------|
| 字母 | 日期或时间元素 |
| y | 年 |
| M | 月 |
| d | 月份中的天数 |
| E | 星期中的天数 |
| H | 小时数(24小时) |
| h | 小时数(12小时) |
| m | 分钟数 |
| s | 秒钟数 |
| a | Am/Pm/上午/下午标记 |
| S | 毫秒数 |

方法:

format(Data):将Data类型,格式化成字符串

parse(String):将字符串解析成Data类型

3.Calendar

一个抽象类

java 复制代码
​//获取实例对象
Calendar calendar=Calendar.getInstance();
        calendar.set(2000,Calendar.MAY,12);
        calendar.set(Calendar.HOUR_OF_DAY,9);


        //获取年份  月份  日期
        int year = calendar.get(Calendar.YEAR);
        System.out.println("year = " + year);
        int month = calendar.get(Calendar.MONTH)+1;//0-11
        System.out.println("month = " + month);
        int date = calendar.get(Calendar.DATE);
        System.out.println("date = " + date);
        int week = calendar.get(Calendar.DAY_OF_WEEK);//一周的第几天
        System.out.println("week = " + week);//从周日开始是第1天
        int day = calendar.get(Calendar.DAY_OF_MONTH);//一个月的第几天
        System.out.println("day = " + day);
        int dy = calendar.get(Calendar.DAY_OF_YEAR);
        System.out.println("dy = " + dy);
        int hour = calendar.get(Calendar.HOUR);//12小时制的
        System.out.println("hour = " + hour);
        int hour1=calendar.get(Calendar.HOUR_OF_DAY);//24小时制
        System.out.println("hour1 = " + hour1);
        int minute = calendar.get(Calendar.MINUTE);
        System.out.println("minute = " + minute);
        int second = calendar.get(Calendar.SECOND);
        System.out.println("second = " + second);*/

        //Calendar转Date
        Date time = calendar.getTime();
        System.out.println(DateUtil.getSystemDateTime(time));
        //Date转成Calender
        Date date= DateUtil.parse("yyyy-MM-dd HH:mm:ss","2012-01-31 10:10:23");
        calendar.setTime(date);

​

4.GregorianCalendar

格里高利历是公历的标准名称,教皇格里高利十三世于1582年颁布。公历纪元,又称"西元"

儒略历:公元前45年1月1日起执行的一种历法。一年12个月,大小月交替,四年一闰,平年365日,闰年366天。年平均长度365.25天。

1949年9月27日,中国政协通过,采用国际社会通用的西历和西元作业历法和纪年。

四年一闰,百年不闰,四百年一大闰

年均长度365天5小时49分12秒,按此计算方式,3000年左右误差一天。
判断闰年的方法 isLeapYear(int),返回一个boolean类型的值,1582年后,计算方式不同

5.JDK8新增日期工具类

LocalDate:获取本地日期

LocalTime:获取本地时间

LocalDateTime:获取本地日期和时间

单独获取日期时间类中的每个值

使用给定值修改日期

设置日期和时间的偏移量

Instant类

代表时间点,获取日期变更子午线时间

DateTimeFormatter格式化和解析

java 复制代码
 //将LocalDate转换成字符串String格式
        DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        LocalDate date=LocalDate.now();
        String s = formatter.format(date);
        System.out.println(s);
        //将LocalDateTime转换成字符串String格式
        formatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        LocalDateTime localDateTime = LocalDateTime.now();
        String s1 = formatter.format(localDateTime);
        System.out.println("s1 = " + s1);
        //将时间戳转换成字符串日期格式
        long x= Instant.now().toEpochMilli();
        LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(x)
                , ZoneId.systemDefault());
        String s2=formatter.format(dateTime);
        System.out.println("s2 = " + s2);
       /* System.out.println(ZoneId.systemDefault());
        System.out.println("dateTime = " + dateTime);*/

        //将字符解析成日期
        formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String s4="2022-09-01";
        LocalDate parse1 = LocalDate.parse(s4, formatter);
        System.out.println("parse1 = " + parse1);
        //将字符解析成日期时间
        formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String s3="2022-05-01 12:20:30";
        LocalDateTime parse = LocalDateTime.parse(s3,formatter);
        System.out.println("parse = " + parse);

Period计算两个"日期"之间的间隔,得到的是年月日,假设2022年9月2日和2021年2月1日去计算得到相关1年7月1天,没办法知道具体多少天

java 复制代码
LocalDate date1=LocalDate.of(1949,10,1);
        LocalDate date2=LocalDate.now();
        /*
        Period x = Period.between(date1, date2);
        System.out.println(x.getYears()); //获取相差年份
        System.out.println(x.getMonths()); //获取相差月份
        System.out.println(x.getDays()); //获取相差天数
        */
        //计算两个日期相差天数方法1
        long days = ChronoUnit.DAYS.between(date1, date2);
        System.out.println("days = " + days);
        //计算两个日期相差天数方法2
        long days1 = date2.toEpochDay() - date1.toEpochDay();
        System.out.println("days1 = " + days1);

Duration计算两个日期时间的间隔

java 复制代码
public class Test8 {
    public static void main(String[] args) {

        LocalDateTime dateTime=LocalDateTime.
                of(1922,7,10,10,10,5);
        LocalDateTime now=LocalDateTime.now();
        //计算方式1
        Duration duration = Duration.between(dateTime, now);
       /* System.out.println(duration.toDays());//计算两个日期时间相差的天数
        System.out.println(duration.toHours());//计算两个日期时间相差的小时
        System.out.println(duration.toSeconds());//计算两个日期时间相差的秒数
        System.out.println(duration.getSeconds());//和上面相同*/

        //计算方式2
        /*long days = dateTime.until(now, ChronoUnit.DAYS);
        System.out.println("days = " + days);
        long hours = dateTime.until(now, ChronoUnit.HOURS);
        System.out.println("hours = " + hours);
        long months = dateTime.until(now, ChronoUnit.MONTHS);
        System.out.println("months = " + months);*/
        //计算方式3
        long years = ChronoUnit.YEARS.between(dateTime, now);
        System.out.println("years = " + years);
        long hours = ChronoUnit.HOURS.between(dateTime, now);
        System.out.println("hours = " + hours);
        long  centuries= ChronoUnit.CENTURIES.between(dateTime, now);
        System.out.println("centuries = " + centuries);
    }
}

时间调节器

java 复制代码
public class Test9 {
    public static void main(String[] args) {
        LocalDate date=LocalDate.now();
        //获取本周一时间
        LocalDate date1 = date.with(DayOfWeek.MONDAY);
        //获取下周一时间
        date1=date.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        //获取本月第一天
        date1=date.with(TemporalAdjusters.firstDayOfMonth());
        //获取本月最后一天
        date1=date.with(TemporalAdjusters.lastDayOfMonth());
        //获取本年第一天
        date1=date.with(TemporalAdjusters.firstDayOfYear());
        System.out.println(date1);
    }
}

Date类和LocalDate(LocalTime\LocalDateTime)转换

java 复制代码
​
public class Test10 {
    public static void main(String[] args) {
        //将LocalDate转成Date
        LocalDate date2=LocalDate.now();
        ZonedDateTime zonedDateTime1 = date2.atStartOfDay().atZone(ZoneId.systemDefault());
        Instant instant = zonedDateTime1.toInstant();
        Date date1=Date.from(instant);
        String s = new SimpleDateFormat("yyyy-MM-dd").format(date1);
        System.out.println(s);

        //将LocalDateTime转成Date类型

        LocalDateTime date=LocalDateTime.now();
        ZonedDateTime zonedDateTime = date.atZone(ZoneId.systemDefault());
        Instant instant1 = zonedDateTime.toInstant();
        Date date3=Date.from(instant1);
        String s1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date3);
        System.out.println(s1);

        //Date转成LocalDate
        Date date4=new Date();
        ZonedDateTime zonedDateTime = date4.toInstant().atZone(ZoneId.systemDefault());
        LocalDate date5=zonedDateTime.toLocalDate();
        System.out.println(date5);

        //Date转成LocalDateTime
        Date date6=new Date();
        ZonedDateTime zonedDateTime = date6.toInstant().atZone(ZoneId.systemDefault());
        LocalDateTime date7=zonedDateTime.toLocalDateTime();
        LocalTime time=zonedDateTime.toLocalTime();
        System.out.println(date7);
    }
}

​

制作不易,麻烦大家点个赞,写的不好的请各路大神指点

相关推荐
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck2 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei2 小时前
java的类加载机制的学习
java·学习
励志成为嵌入式工程师3 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~4 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616884 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端