java与日期相关的类

java的包装类

java与日期相关的类

Date类分别在java.util.Date和java.sql.Date中,接下来分别介绍两个不同包中的类,并介绍它们之间的转换关系

java.util.Date

从jdk的API说明文档中先查看java.util.Date的相关信息
在这里插入图片描述

java.util.Date中有无参构造器和带参构造器:
在这里插入图片描述

方法说明返回值
toString()将此Date对象转换为以下形式的字符串返回String字符串类型的值
toGMTString()返回一个日期,该日期用格林威治标准时间 (GMT) 表示并已被转换为字符串返回String字符串类型的值
toLocaleString()获取本地日期和时间返回String字符串类型的值
getYear()获取年份,返回的值需要加上1900为现在的年份返回int类型的值
getMonth()获取月份,会比数据中的月份少1,这里需要进行加 1 操作。返回int类型的值
getTime()返回此Date对象表示的自格林尼治标准时间1970年1月1日00:00:00以来的毫秒数。返回的是毫秒单位的long数据

System类在java.lang.System中,其中有currentTimeMillis()方法,由于这个这个方法被static修饰,所以可以直接使用类名.方法名的格式调用,它的作用是返回当前时间(以毫秒为单位),返回的是long类型的数据。

package Test;

import java.util.Date;

public class Test01 {
    public static void main(String[] args) {
        Date date = new Date();//调用java.util.Date中的无参构造器,创建实例化对象date
        System.out.println(date);
        System.out.println(date.toString());
        System.out.println(date.toGMTString());//中间带横线的是过期方法 过时方法
        System.out.println(date.toLocaleString());
        System.out.println(date.getYear());//121+1900=2021
        System.out.println(date.getMonth());//4+1 = 5
        System.out.println(date.getTime());//1620543328553
        System.out.println(System.currentTimeMillis());//1620543497996
        //currentTimeMillis()是静态的,可以使用类名.方法名直接调用
        //public static native long currentTimeMillis();本地方法,这个方法可以衡量算法所用的时间
        long startTime = System.currentTimeMillis();
        for(int i = 0 ;i < 100000;i++){
            System.out.println(i);
        }
        long endTime = System.currentTimeMillis();
        System.out.println(endTime - startTime);
    }
}

java.sql.Date

JDK的API说明文档中查看java.sql.Date类的相关信息,比如说java.sql.Date的继承关系和实现的接口
在这里插入图片描述
java.sql.Date的构造器如下:
在这里插入图片描述

package Test;

import java.sql.Date;

public class Test02 {
    public static void main(String[] args) {
        Date d = new Date(1620543891315L);
        System.out.println(d);
        /*
        * java.sql.Date和java.util.Date的区别
        * java.util.Date:年月日 时分秒
        * java.sql.Date:年月日
        * java.sql.Date和java.util.Date的联系,java.sql.Date继承了java.util.Date类
        * */
        java.util.Date date = new Date(1620543891315L);
        //util.Date---->sql.Date
        //方式一:向下转型
        Date date1 = (Date) date;
        //方式二:利用构造器
        Date date2 = new Date(date.getTime());
        //sql--->util
        java.util.Date date3 = d;
        //String--->sql.Date
        Date date4 = Date.valueOf("2019-3-8");
    }
}

java.sql.Date继承了java.util.Date,所以可以利用util.Date向下转型转到sql.Date,从而实现util.Date转换到sql.Date
java.sql.Date的构造器:

       Date d = new Date(1620543891315L);

在IDEA中查看它的对应的源码:

在这里插入图片描述

在这里插入图片描述

java.text下的常用类

package com.zhz.Test;

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

public class Test02 {
    public static void main(String[] args) {
        // 日期的转换
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        /*
         * public class SimpleDateFormat extends DateFormat
         * SimpleDateFormat是子类DateFormat(是父类,还是一个抽象类)
         */
        // String-->Date
        try {
            Date d = df.parse("2019-4-6 12:23:54");
            System.out.println(d);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //Date-->String
        String format = df.format(new Date());
        System.out.println(format);
        Date date = new Date();
        System.out.println(date.toString());
        System.out.println(date.toGMTString());
        System.out.println(date.toLocaleString());
    }
}
  • java.text.SimpleDateFormat
    在这里插入图片描述
    java.text.SimpleDateFormat继承自 java.text.DateFormat类
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

调用了 java.text.SimpleDateFormat的带参构造器
在这里插入图片描述
总结java.textSimpleDateFormat类中的几个常用的方法:

方法说明返回值
parse()解析字符串中的文本以产生日期。返回一个Date日期类型的值
format()将给定的Date格式化为日期/时间字符串,并将结果附加到给定的StringBuffer。返回StringBuffer类型的值(后面的文章中会提到)

java.textSimpleDateFormat中的parse()方法使用的时候会主动抛出异常,可以使用try-catch语句进行接收:
在这里插入图片描述

java.util.中与日期相关的类

package com.zhz.Test;

import java.sql.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Test03 {
    public static void main(String[] args) {
        Calendar cal = new GregorianCalendar();
        Calendar cal2 = Calendar.getInstance();
        System.out.println(cal);
        // 常用的方法:get方法 传入的参数 Calendar中定义的常量
        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.get(Calendar.MONTH));
        System.out.println(cal.get(Calendar.DATE));
        System.out.println(cal.get(Calendar.DAY_OF_WEEK));
        System.out.println(cal.getActualMaximum(Calendar.DATE));// 获取当月日期的最大天数
        // set方法:可以改变Calendar中的内容
        cal.set(Calendar.YEAR, 1900);
        cal.set(Calendar.MONTH, 3);
        cal.set(Calendar.DATE, 16);
        System.out.println(cal);
        // String---》Calendar
        // 分解:
        // String-->sql.Date
        Date date = Date.valueOf("2020-4-5");
        // sql.Date-->Calendar
        cal.setTime(date);
        System.out.println(cal);
    }
}
  • java.util.GregorianCalendar
    在这里插入图片描述
    在这里插入图片描述
        Calendar cal = new GregorianCalendar();

GregorianCalendar类中有三个常用的方法分别是get()方法和set()方法和getActualMaximum():
get()方法中有几个参数,传入的参数 Calendar中定义的常量:
在这里插入图片描述
set()方法:可以改变Calendar中的内容

        cal.set(Calendar.YEAR, 1900);
        cal.set(Calendar.MONTH, 3);
        cal.set(Calendar.DATE, 16);

getActualMaximum()方法:考虑给定的时间值和getFirstDayOfWeek,getMinimalDaysInFirstWeek,getGregorianChange和getTimeZone方法的当前值,返回此日历字段可能具有的最大值,返回的是一个int类型的值

System.out.println(cal.getActualMaximum(Calendar.DATE));// 获取当月日期的最大天数

String类型的日期转换成Calendar类型的日期,需要分解为两个步骤:
先从String–>sql.Date,再从sql.Date–>Calendar类

        // String---》Calendar
        // 分解:
        // String-->sql.Date
        Date date = Date.valueOf("2020-4-5");
        // sql.Date-->Calendar
        cal.setTime(date);
        System.out.println(cal);
  • java.util.Calendar
    在这里插入图片描述
    java.util.Calendar继承了java.lang.Object类
package com.zhz.Test;

import java.sql.Date;
import java.util.Calendar;
import java.util.Scanner;

public class Test04 {
    public static void main(String[] args) {
        // String-->Calendar
        // 录入日期的String
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您想要查看的日期:(请按照2012-5-6的格式书写):");
        String strDate = sc.next();
        // System.out.println(strDate);
        // String-->Calendar
        // String-->Date
        Date date = Date.valueOf(strDate);
        // Date-->Calendar
        Calendar cal = Calendar.getInstance();
        // 星期的提示
        System.out.println("日\t一\t二\t三\t四\t五\t六");
        // 获取本月的最大天数
        int maxDay = cal.getActualMaximum(Calendar.DATE);
        // 获取当前日期中的日
        int nowDay = cal.get(Calendar.DATE);
        // 将日期调为本月的1号
        cal.set(Calendar.DATE, 1);
        // 获取这个1号是本周的第几天
        int num = cal.get(Calendar.DAY_OF_WEEK);
        // System.out.println(num);
        // 前面空出来的天数是:
        int day = num - 1;
        // 在日期前将空格打印出来
        for (int i = 0; i <= day; i++) {
            System.out.println("\t");
        }

        // 引入一个计数器
        int count = 0;
        // 空出来的日子也要放入计数器
        count = count + day;

        // 遍历:从1号开始遍历,遍历到maxDay
        for (int i = 1; i <= maxDay; i++) {
            if (i == nowDay) {// 如果遍历的i和当前日子一样的话,后面多加一个*
                System.out.print(i + "*" + "\t");
            } else {
                System.out.print(i + "\t");
            }
            count++;
            if (count % 7 == 0) {
                System.out.println();
            }
        }
    }
}

接下来介绍java.util.Calendar类中的常用的方法:

方法名说明返回值
getInstance()获取使用指定时区和默认区域设置的日历。返回的日历基于给定时区中的当前时间返回的是一个Calendar类型的值。(这个方法被static修饰,所以可以直接使用类名.方法名的形式进行调用)
getActualMaximum​()返回给定此日历的时间值时,指定日历字段可能具有的最大值。返回一个int类型的值

java.time.中与时间相关的类

  • java.time.LocalDate
    在这里插入图片描述
  • java.time.LocalDateTime
    在这里插入图片描述

java.time.LocalDateTime类中的常用的方法有:

方法说明返回值
now()从默认时区的系统时钟获取当前日期。返回的是LocalDateTime类型的值,由于now()方法被static修饰,所以可以使用类名.方法名的形式进行调用
  • java.time.LocalTime
    在这里插入图片描述
  • java.time.LocalDateTime
    在这里插入图片描述
  • java.time.LocalDate
    在这里插入图片描述
    将这三个类放在一起讲,接下来描述它们的共有方法:
方法说明返回值
now()获取当前的日期 时间 日期+时间返回当前类的值,由于被static修饰,可以直接使用类名.方法名调用
of()设置指定的日期 时间 日期+时间返回当前类的值,由于被static修饰,可以直接使用类名.方法名调用
withMonth()返回此LocalDateTime的副本,其中更改了每年的月份。返回当前类的值,除了withMonth()方法还有一系列的with方法
getYear()此方法返回年份的原始int值。返回int类型的值,除了getYear还有一系列的get方法
plusMonths()其中添加了指定的月数。返回当前所在类的值,除了plusMonths()方法还有一系列的plus方法
minusDays()返回减去指定的天数。返回当前类的值,除了minusDays()方法还有一系列的minus方法
package com.zhz.Test;

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

public class Test06 {
    public static void main(String[] args) {
        // 1.完成实例化
        // 方法1:now()-->获取当前的日期 时间 日期+时间
        LocalDate localDate = LocalDate.now();
        System.out.println(localDate);
        LocalTime localTime = LocalTime.now();
        System.out.println(localTime);
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);
        // 方法2:of()-->设置指定的日期 时间 日期+时间
        LocalDate of = LocalDate.of(2010, 5, 6);
        System.out.println(of);
        LocalTime of1 = LocalTime.of(12, 35, 56);
        System.out.println(of1);
        LocalDateTime of2 = LocalDateTime.of(1890, 12, 23, 13, 24, 12);
        System.out.println(of2);
        // ----LocalDateTime----
        // 一系列get方法,用来获取信息
        System.out.println(localDateTime.getYear());
        System.out.println(localDateTime.getMonth());
        System.out.println(localDateTime.getMonthValue());
        System.out.println(localDateTime.getDayOfMonth());
        System.out.println(localDateTime.getDayOfWeek());
        System.out.println(localDateTime.getHour());
        System.out.println(localDateTime.getMinute());
        System.out.println(localDateTime.getSecond());
        //常用的with方法
        LocalDateTime localDateTime2 = localDateTime.withMonth(8);
        System.out.println(localDateTime);
        System.out.println(localDateTime2);
        //提供了加减的操作
        //加操作
        LocalDateTime localDateTime1 = localDateTime.plusMonths(4);
        System.out.println(localDateTime);
        System.out.println(localDateTime1);
        //减操作
        LocalDateTime localDateTime3 = localDateTime.minusMonths(5);
        System.out.println(localDateTime);
        System.out.println(localDateTime3);
    }
}
package Test;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.TemporalAccessor;

public class Test05 {
    public static void main(String[] args) {
        //格式化类:DateTimeFormatter
        //方式一:预定义的标准格式 比如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
        DateTimeFormatter df1 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        //df1就可以帮助我们完成LocalDateTime和String之间的类型转换
        //LocalDateTime-->String
        LocalDateTime now = LocalDateTime.now();
        String str = df1.format(now);
        System.out.println(str);
        //String-->LocalDateTime
        TemporalAccessor parse = df1.parse("2021-05-11T17:16:47.285");
        System.out.println(parse);
        //方式二:本地化相关的格式,比如ofLocalizedDateTime
        //参数:FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT
        //FormatStyle.LONG
        DateTimeFormatter df2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
        //LocalDateTime-->String
        LocalDateTime now1 = LocalDateTime.now();
        String str2 = df2.format(now1);
        System.out.println(str2);
        //String-->LocalDateTime
        TemporalAccessor parse1 = df2.parse("20-6-15 下午3:18");
        System.out.println(parse1);
        //方式三:自定义的格式:ofPattern("yyyy-MM-dd hh:mm:ss")
        DateTimeFormatter df3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
        //LocalDateTime-->String
        LocalDateTime now2 = LocalDateTime.now();
        String format = df3.format(now2);
        System.out.println(format);
        //String-->LocalDateTime
        TemporalAccessor parse2 = df3.parse("2020-06-15 03:22:03");
        System.out.println(parse2);
    }
}

java的Math和Random类

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_45671732

你们鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值