API--03--SimpleDateFormat、Calendar日历类、比较日期的大小

JDK8 之前日期时间 API

在这里插入图片描述

MYsql 时间类型

在这里插入图片描述

SimpleDateFormat

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

1 格式化:日期 —>字符串

sdf.format():

package stringtest;

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

public class test02 {
    public static void main(String[] args) {

            //实例化SimpleDateFormat:使用默认的构造器
            SimpleDateFormat sdf01 = new SimpleDateFormat();
            //指定格式
            SimpleDateFormat sdf02 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

            //格式化:日期 --->字符串
            Date date = new Date();
            System.out.println(date);

            String format01 = sdf01.format(date);
            String format02 = sdf02.format(date);

            System.out.println("默认格式 "+format01);
            System.out.println("指定格式 "+format02);

    }
}

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

2 解析:格式化的逆过程,字符串 —> 日期

sdf1.parse()

package stringtest;

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

public class test02 {
    public static void main(String[] args) throws ParseException {

        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

        //解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),
        //否则,抛异常
        Date date2 = sdf1.parse("2020-02-18 11:48:27");

        
        System.out.println(date2);

    }
}

在这里插入图片描述

练习一:字符串"2020-09-08"转换为java.sql.Date

@Test
    public void testExer() throws ParseException {
        String birth = "2020-09-08";

        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf1.parse(birth);

        java.sql.Date birthDate = new java.sql.Date(date.getTime());
        System.out.println(birthDate);
    }

Calendar日历类 (抽象类)

在这里插入图片描述

注意:

在这里插入图片描述

案例1

import org.junit.Test;

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

public class Test01 {

    @Test
    public void testCalendar(){
        System.out.println("今天是2021.07.14");

        //1.实例化
        //方式一:创建其子类(GregorianCalendar)的对象
        //方式二:调用其静态方法getInstance()
        Calendar calendar = Calendar.getInstance();
//        System.out.println(calendar.getClass());

        //2.常用方法
        //get()
        int days = calendar.get(Calendar.DAY_OF_MONTH); //14
        System.out.println(days);
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); //195

        //set()
        //calendar可变性
        calendar.set(Calendar.DAY_OF_MONTH,22);   //22
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);  //22

        //add()
        calendar.add(Calendar.DAY_OF_MONTH,-3); //22-3=19
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

        //getTime():日历类---> Date
        Date date = calendar.getTime();    //Mon Jul 19 20:45:05 CST 2021
        System.out.println(date);

        //setTime():Date ---> 日历类
        Date date1 = new Date();
        calendar.setTime(date1);
        days = calendar.get(Calendar.DAY_OF_MONTH);   //14
        System.out.println(days);

    }
}


在这里插入图片描述

在这里插入图片描述

案例2

Calendar的常用属性

在这里插入图片描述

Calendar的常用方法

在这里插入图片描述

案例3

  @Test
    public void testCalendar(){
        System.out.println("----------------获取当前的日历时间------");
        // 获取当前的日历时间
        Calendar c = Calendar.getInstance();

        // 获取年
        int year = c.get(Calendar.YEAR);
        // 获取月
        int month = c.get(Calendar.MONTH);
        // 获取日
        int date = c.get(Calendar.DATE);
        System.out.println(year + "年" + (month + 1) + "月" + date + "日");


        // 5年后的10天前
        System.out.println("----------------5年后的10天前------");
        c.add(Calendar.YEAR, 5);
        c.add(Calendar.DATE, -10);
        // 获取年
        year = c.get(Calendar.YEAR);
        // 获取月
        month = c.get(Calendar.MONTH);
        // 获取日
        date = c.get(Calendar.DATE);
        System.out.println(year + "年" + (month + 1) + "月" + date + "日");

        System.out.println("----------------设置2011年12月11日------");
        c.set(2011, 11, 11);
        // 获取年
        year = c.get(Calendar.YEAR);
        // 获取月
        month = c.get(Calendar.MONTH);
        // 获取日
        date = c.get(Calendar.DATE);
        System.out.println(year + "年" + (month + 1) + "月" + date + "日");

    }

在这里插入图片描述

求指定天数前的日期

自定义方法 Calendar

    @Test
    public void test01() throws Exception {
        String date="2021-07-14";
        String dayBefore = getDayBefore(date, 10);
        System.out.println(dayBefore);

    }

    private String getDayBefore(String strDay,int dayNum) throws Exception {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date1 = sdf.parse(strDay);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date1);
        calendar.add(Calendar.DATE,-dayNum);
        
        String beforeDay=sdf.format(calendar.getTime());
        return beforeDay;
    }

在这里插入图片描述
用apache下的DateUtils

    <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>
  @Test
    public void test02() throws Exception {
        String date="2021-07-15";

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date1 = sdf.parse(date);

        //用apache下的DateUtils转化
        Date addDays = DateUtils.addDays(date1, -5);

        System.out.println(sdf.format(addDays));

    }

在这里插入图片描述

比较日期的大小的几种方法

  1. 用compareTo()方法:
  2. 直接用Date自带方法before()和after()比较
  3. getTime()方法 date格式换成毫秒值 比较毫秒值大小
    @Test
    public void test03() throws Exception {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyy-MM-dd HH-mm-ss");
        String time1= "1996-10-24 23-59-59";
        String time2= "2018-03-29 23-59-59";
        Date date1 =  simpleDateFormat.parse(time1);
        Date date2 =  simpleDateFormat.parse(time2);

        //1.使用Date的compareTo()方法,大于、等于、小于分别返回1、0、-1
        System.out.println(date1.compareTo(date2));

        //2.使用时间戳(指的是从1970年1月1日起到该日期的毫秒数)直接比较大小
        System.out.println(date1.getTime() > date2.getTime());

        //3.使用Date的before()、after()方法
        System.out.println(date1.before(date2));//如果前者比后者小返回true,否则为false
        System.out.println(date1.after(date2));//如果前者比后者大返回true,否则为false


    }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值