日期类Date &SimpleDateFormat & Calendar

Date类

java.util.Date 日期类,类 Date 表示特定的瞬间,精确到毫秒。

构造方法

  • Date() ;默认系统时间
    分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。

常用方法

  • 1.long getTime()
    返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

过时方法:

  • int getYear()+1900 ;获取年份距今(),所以需加上1900才能获得当前年份

  • int getMonth() +1 ;获取月份 底层代码自然月-1 ,所以要想获得当前月份,需要+1
    在这里插入图片描述

  • int getDay(); 星期几

  • int getDate();几号

  • int getHours();获取当天几时

  • int getMinutes();获取当天几分

  • int getSeconds();获取当前时间的毫秒值

  • String toLocaleString();将date的默认格式转成toLocaleString()格式,
    过时2021-9-15 19:01:06

package JAVA_API.num7_Date;

import java.util.Date;
/**
 *
 * @author yyc
 * 2021/9/15 18:49
 */
public class Test1_Date {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);//Wed Sep 15 18:50:49 CST 2021
        /*
        * 常用方法
        * */
        System.out.println(date.getTime());//获取的是从1970年1月1日0点0分0秒的毫秒值。1631703088070
        System.out.println(date.getYear()+1900);//获取年份距今:2021
        System.out.println(date.getMonth()+1);//获取月份 底层代码自然月-1  ,9
        System.out.println(date.getDay());//星期几  3
        System.out.println(date.getDate());//几号 15号
        System.out.println(date.getHours());//获取当天几时
        System.out.println(date.getMinutes());//获取当天几分
        System.out.println(date.getSeconds());//获取当天几秒

        //将date的默认格式转成toLocaleString()格式,过时
        System.out.println(date.toLocaleString());//2021-9-15 19:01:06
    }
}

SimpleDateFormat 日期格式化工具

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

SimpleDateFormat 类构造方法

  • SimpleDateFormat()
    用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。

  • SimpleDateFomat(String pattern)
    用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

通过SimpleDateFormat对象调用常用方法

两种类型的日期数据互转 String <-> Date
将String 格式的日期 转成 Date 格式

  • Date parse(String str);将字符串解析成Date类型
  • String format(Date date); 将Date对象格式的日期转成字符串
public static void method1() throws ParseException {
     String str = "2021-9-19 15:47:24";
     //创建SimpleDateFormat对象
     //参数为日期的格式:y表示年,M表示月,d表示日,H表示时,m表示分,s 表示秒
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     //Date parse(String strdate);将字符串解析成Date类型
     Date date = sdf.parse(str);
     System.out.println(date);//Sun Sep 19 15:47:24 CST 2021
     //String format(Date date);将Date对象格式转换成字符串表示的日期格式
     String sdate = sdf.format(date);
     System.out.println(sdate);//2021-09-19 15:47:24
 }
 /*
    * 接收用户输入的出生日期:计算距今活了多少天
    * */
public static void method2() throws Exception{
   Scanner scan = new Scanner(System.in);
   System.out.println("请输入日期(yyyy-MM-dd):");
   //1.声明字符串对象接收用户控制台输出
   String sdate = scan.nextLine();
   //2.声明日期转换格式对象
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   //3.使用SimpleDateFormat对象调用parse()方法将字符串类型的日期转换为Date类型的日期格式
   Date nowdate = sdf.parse(sdate);
   //4.获取用户出生日期的毫秒值,通过日期对象调用getTime()方法获取毫秒值。
   long birth = nowdate.getTime();
   //5.获取当前系统的毫秒值
   long now = System.currentTimeMillis();
   System.out.println((now - birth)/1000/60/60/24);
}

Calendar 日历类是抽象类

Calendar 类是抽象类,无法直接创建对象,该类提供了一个静态方法getInstance(),用于返回Calendar类的子类对象,该子类对象是根据当前默认的时区和语言环境取来的

常用方法

  • 1.int get(int field);返回给定日历字段的值

  • 2.void set(int field,int value);将指定字段设置为指定的值

  • void set(int year, int month, int date)

  • void set(int year, int month, int date, int hourOfDay, int minute);

  • 3.void add(int field,int amount);将给定字段增加或减少指定的值,具体是增加还是减少,由第一个参数的正负决定

Date 与 Calendar 之间的相互转换。

  • 4.Date getTime();返回一个表示此Calendar时间值的Date对象

  • 5.void setTime(Date date); 用当前的Calendar表示给定的Date

package JAVA_API.num7_Date;

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

/**
 * java.util.Calendar 日历类,在Date后出现,替换掉了许多Date类的 方法,
 * 该类将所有可能使用到的时间日期都封装为静态成员变量。方便获取
 *  Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等
 *  日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
 * @author yyc
 * 2021/9/15 20:12
 */
public class Test3_Calendar {
    public static void main(String[] args) {
        method1();
    }
    public static void method1(){
    /*
    * Calendar 类是抽象类,无法直接创建对象,该类提供了一个静态方法getInstance(),用于返回Calendar类的子类对象,
    * 该子类对象是根据当前默认的时区和语言环境取来的
    *  ---GregorianCalendar 阳历
    * */
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        /*
        * 1.int get(int field);返回给定日历字段的值
        * 2.void set(int field,int value);将指定字段设置为指定的值
        *  void set(int year, int month, int date)
         * void set(int year, int month, int date, int hourOfDay, int minute);
         * 3.void add(int field,int amount);将给定字段增加或减少指定的值,具体是增加还是减少,由第一个参数的正负决定
        * 4.Date 与 Calendar 之间的相互转换。
        * Date getTime();返回一个表示此Calendar时间值的Date对象
        * 5.void setTime(Date date); 用当前的Calendar表示给定的Date
        * */
        //1.int get(int field);返回给定日历字段的值
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year);//2021
        int month = calendar.get(Calendar.MONTH);//获取当前月得自然月+1
        System.out.println(month + 1);
        int day =  calendar.get(Calendar.DAY_OF_MONTH);//获取本月第几天
        System.out.println(day);

        //2.void set(int field,int value);将指定字段设置为指定的值
        calendar.set(Calendar.YEAR,2030);
        calendar.set(Calendar.MONTH,15);
        System.out.println(calendar.get(Calendar.MONTH));//3,如果设置的数超过常规值,会自动进入下一轮
        calendar.set(Calendar.DATE,33);
        System.out.println(calendar.get(Calendar.DATE));//3,如果设置的数超过了本月月份的常规值,会自动进入下一轮
        calendar.set(1999,1,1);
        System.out.println(calendar.get(Calendar.YEAR));//1999
        System.out.println(calendar.get(Calendar.MONTH));//1
        System.out.println(calendar.get(Calendar.DATE));//1

        //3.void add(int field,int amount);将给定字段增加或减少指定的值,具体是增加还是减少,由第一个参数的正负决定
        calendar.add(Calendar.YEAR,20);
        calendar.add(Calendar.MONTH,-10);
        calendar.add(Calendar.DAY_OF_MONTH,15);
        System.out.println(calendar.get(Calendar.YEAR));//1999+20 = 2018
        System.out.println(calendar.get(Calendar.MONTH));//月份倒推10 等于 3
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));// 1  + 15 = 16

        //Date 与 Calendar 之间的相互转换
        //Date getTime();返回一个表示此Calendar时间值的Date对象
        Date date = calendar.getTime();
        System.out.println(date);//Mon Apr 16 20:55:08 CST 2018
        //void setTime(Date date); 用当前的Calendar表示给定的Date
        calendar.setTime(date);
        System.out.println(calendar);


    }
}

判断平闰年

package JAVA_API.num7_Date;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

/**
 * 题:接收用户从控制台输入的日期,判断这一年是否为闰年,这个月有多少天,这一天是星期几?
 * @author yyc
 * 2021/9/15 19:46
 */
public class CommonOrLeapYear {
    public static void main(String[] args)throws Exception {
        method();
    }
    public static void method() throws Exception{
        Scanner scan = new Scanner(System.in);
        //1.提示用户输入日期
        System.out.println("请输入日期:");
        String sdate = scan.nextLine();
        //2.声明日期转换格式对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //3.通过SimpleDateFormat对象 调用方法将字符串日期格式转换为Date对象
        Date date = sdf.parse(sdate);
        Calendar calendar = Calendar.getInstance();
        //5.将Date转为calendar
        calendar.setTime(date);
        //6.获取年份
        int year = calendar.get(Calendar.YEAR);
        //判断平闰年
        //需要用到子类的特有方法,需要向下造型
        GregorianCalendar gc = (GregorianCalendar)calendar;
        if (gc.isLeapYear(year)){
        System.out.println(year + "是闰年");
        }else{
            System.out.println("是平年");
        }
        //getActualMaximum (int field);获取该月有多少天
        int day = calendar.getActualMaximum(Calendar.DATE);
        System.out.println("这个月有 : "+ day + "天");
        //获取这一天是这一周的第几天
        int c = calendar.get(Calendar.DAY_OF_WEEK);
        if (c == 0){
            System.out.println("这一天是星期天");
        }else{
            System.out.println("这一天是这周的第 " + c + "天");
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值