16.Java-Date类、SimpleDateFormat类、Calendar类

16.Java-Date类、SimpleDateFormat类、Calendar类

一、Date类的概述和方法使用

A:Date类的概述
	类 Date 表示特定的瞬间,精确到毫秒。 
B:构造方法
	public Date()
	public Date(long date)  //把一个long类型的毫秒值转换成一个日期对象
C:成员方法
public long getTime():	获取一个日期对象对象毫秒值
	public void setTime(long time):	给一个日期对象设置上指定的毫秒值 例:date.setTime(1000 * 60 * 60) ;
D:案例演示
	Date类的构造方法和成员方法使用
Date ---- long 的转换	
调用getTime方法

long --- Date 的转换
可以使用构造方法
setTime(long time)
package org.westos.java18;

import java.util.Date;

public class Test15 {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date); //Fri Dec 25 15:35:44 CST 2020
        //给计算机元年加上相应的时间量

        // 分配 Date 对象并初始化此对象,以表示自从标准基准时间
        //(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
        Date date1 = new Date(1000 * 60 * 60 * 24);
        System.out.println(date1); //Fri Jan 02 08:00:00 CST 1970
        //获取从 1970 到 date表示的时间 所间隔的毫秒值
        long time = date1.getTime(); //86400000
        long l = System.currentTimeMillis(); //1608881744652
        System.out.println(time);
        System.out.println(l);
        //给计算机元年,增加相应的时间量
        date.setTime(1000*60*60*24);
        date1.setTime(1000*60*60*24);
        System.out.println(date); //Fri Jan 02 08:00:00 CST 1970
        System.out.println(date1); //Fri Jan 02 08:00:00 CST 1970
    }
}
package org.westos.java18;

import java.util.Date;

public class Test16 {
    public static void main(String[] args) {
        //long --- date
        Date date = new Date();
        date.setTime(1000*60*60*24);
        System.out.println(date); //Fri Jan 02 08:00:00 CST 1970
        //date --- long
        long time = date.getTime();
        System.out.println(time); //86400000
    }
}
package org.westos.java18;

@Deprecated //过时的方法标识符
public class MyUtil {
    @Deprecated
    public static void add(){
    }
}

二、SimpleDateFormat类实现日期和字符串的相互转换

SimpleDateFormat: 可以把一个日期对象格式化成一个文本(字符串) , 也可以把一个日期字符串解析成一个日期对象

构造方法:
public SimpleDateFormat():使用默认的模式来创建一个SimpleDateFormat对象
public SimpleDateFormat(String pattern):使用指定的模式(规则比如yyyy:MM:dd HH:mm:ss)来创建一个SimpleDateFormat对象
 
规则的定义

y				年
M				月
d				天
H				时
m				分
s				秒
  
成员方法:
public String format(Date date): 	把一个日期对象格式化成一个字符串
public Date parse(String dateStr):	把一个日期字符串解析成一个日期对象 注意要以指定格式解析
package org.westos.java18;

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

/*
 *  y				年
 * M				月
 * d				天
 * H				时
 * m				分
 * s				秒
 * E               星期
 * D               年中的天数
 * z               时区
 *
 *
 * */
public class Test17 {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date.toString()); //Fri Dec 25 15:51:42 CST 2020
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(); //空参构造采用默认的格式 20-12-25 下午3:52
        String format = simpleDateFormat.format(date);
        System.out.println(format); //20-12-25 下午3:52
        System.out.println("===================");
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E D z");
        String format1 = simpleDateFormat1.format(date);
        System.out.println(format1); //2020-12-25 15:58:35 星期五 360 CST
    }
}
package org.westos.java19;

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

public class Test {
    public static void main(String[] args) throws ParseException {
        //Date --- String
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String format = simpleDateFormat.format(date);
        System.out.println(format); //2020-12-25
        //String --- Date
        String s="2020-12-15 15:20:25";
        //ParseException 解析失败异常
        //注意 日期字符串的格式,和我们SimpleDateFormat中的格式保持一致,否则解析失败。
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = simpleDateFormat1.parse(s);
        System.out.println(date1); //Tue Dec 15 15:20:25 CST 2020
    }
}

三、日期工具类的编写和测试案例

A:案例演示
	日期工具类的编写
	日期工具类的测试
package org.westos.java19;

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

//工具类
public class DateUtil {
    private DateUtil(){

    }
    public static String dateString(String format,Date date){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        String format1 = simpleDateFormat.format(date);
        return format1;
    }
    public static Date stringDate(String s,String format) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        Date parse = simpleDateFormat.parse(s);
        return parse;
    }
}
package org.westos.java19;

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

//测试类
public class MyTest {
    public static void main(String[] args) throws ParseException {
        Date date = new Date(1000 * 60 * 60 * 24);
        String s = DateUtil.dateString("yyyy-MM-dd HH:mm:ss", date);
        System.out.println(s); //1970-01-02 08:00:00
        System.out.println("=========================");
        String s0="2018-02-14";
        String format="yyyy-MM-dd";
        Date date1 = DateUtil.stringDate(s0, format);
        System.out.println(date1); //Wed Feb 14 00:00:00 CST 2018
    }
}

四、你来到这个世界多少天案例

A:案例演示:	需求:算一下你来到这个世界多少天?
分析:
  		a: 键盘录入一个生日(日期字符串)
 		b: 把这个日期字符串对象解析成一个日期对象
  		c: 获取b中的日期对象对应的毫秒值
  		d: 获取当前系统时间对应的毫秒值
 		e: 使用d中的毫秒值 - c中的毫秒值
  		f: 把e中的差值换算成对应的天  差值/1000/60/60/24
  		g: 输出
package org.westos.java19;
/*A:案例演示:	需求:算一下你来到这个世界多少天?*/

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

public class Test2 {
    public static void main(String[] args) throws ParseException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的生日 1997-11-01");
        String s = scanner.nextLine();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date parse = simpleDateFormat.parse(s);
        System.out.println(parse);
        long time = parse.getTime();
        long l = System.currentTimeMillis();
        System.out.println((l-time)/1000/60/60/24);
    }
}

五、Calendar类的概述和获取日期的方法

A:Calendar类的概述  
	Calendar 类是一个抽象类,不能直接new对象,可以通过他的一个静态成员方法getInstance()来获取他的对象
	它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 
	等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
B:成员方法
	public static Calendar getInstance()	使用默认时区和语言环境获得一个日历对象
	public int get(int field)		获得给定日历字段对应的值 field通过Calendar提供的字段来拿
C:案例演示
	Calendar类的成员方法使用
package org.westos.java19;

import java.util.Calendar;

public class Test3 {
    public static void main(String[] args) {
        //GregorianCalendar 是 Calendar的一个子类
        // Calendar gregorianCalendar = new GregorianCalendar(); 多态形式接收
        Calendar instance = Calendar.getInstance();
        System.out.println(instance);
        System.out.println(instance.get(Calendar.YEAR)); //2020
        System.out.println(instance.get(Calendar.MONTH)); //11   0-11 表示 1-12月
        System.out.println(instance.get(Calendar.DAY_OF_MONTH)); //25
        System.out.println(instance.get(Calendar.HOUR_OF_DAY)); //16
        System.out.println(instance.get(Calendar.HOUR)); //4
        System.out.println(instance.get(Calendar.MINUTE)); //34
        System.out.println(instance.get(Calendar.SECOND)); //43
        System.out.println("=============================");
        instance.set(Calendar.YEAR,2017);
        System.out.println(instance.get(Calendar.YEAR)); //2017
        instance.set(Calendar.DAY_OF_MONTH,4);
        System.out.println(instance.get(Calendar.DAY_OF_MONTH)); //4
/*        System.out.println(instance);*/
        instance.set(2020,11,28,14,20,25);
        System.out.println(instance.get(Calendar.MONTH)); //11
        System.out.println(instance.get(Calendar.HOUR)); //2
        System.out.println(instance.get(Calendar.HOUR_OF_DAY)); //14
    }
}

六、Calendar类的add()和set()方法

A:成员方法
	public void add(int field,int amount)		根据日历的规则,为给定的日历字段添加或减去指定的时间量
	public final void set(int year,int month,int date)	设置日历时间 年月日
B:案例演示
	Calendar类的成员方法使用
package org.westos.java19;

import java.util.Calendar;

public class Test4 {
    public static void main(String[] args) {
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.YEAR,1);
        int i = instance.get(Calendar.YEAR);
        System.out.println(i); //2021
        instance.add(Calendar.YEAR,-2);
        System.out.println(instance.get(Calendar.YEAR)); //2019
    }
}

七、如何获取任意年份的2月份有多少天

A:案例演示
	需求:键盘录入任意一个年份,获取任意一年的二月有多少天
	分析:
	  	a: 键盘录入一个年份
  		b: 创建一个Calendar对象
  		c: 把这个Calendar的时间设置为a中录入的年的3月1号    注意2表示3月
 		d: 向前推算一天
 		e: 获取月中的天
  		f: 输出
package org.westos.java19;

import java.util.Calendar;
import java.util.Scanner;

/*    A:
    案例演示
    需求:键盘录入任意一个年份,获取任意一年的二月有多少天
    分析:*/
public class Test5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入年份 如2018");
        String s = scanner.nextLine();
        int year = Integer.parseInt(s);
        //判断这个年份是平年还是闰年
/*        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            System.out.println("是闰年");
        }
        */
        Calendar instance = Calendar.getInstance();
        instance.set(year,2,1);
        instance.add(Calendar.DAY_OF_MONTH,-1);
        System.out.println(instance.get(Calendar.DAY_OF_MONTH));
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值