大数据基础之java常用API三(SimpleDateFormat类和Calendar类的使用)

举报
chad_chang 发表于 2022/10/26 17:07:23 2022/10/26
【摘要】 大数据基础之java常用API三(SimpleDateFormat类和Calendar类的使用)

@toc


在这里插入图片描述

1. SimpleDateFormat

1.1 概念

SimpleDateFormat 是一个与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化和解析。
SimpleDateFormat类, 叫日期格式化类, 专门用来格式化和解析日期的.

  • 格式化(日期 -> 文本), 即: Date -> String
  • 解析(文本 -> 日期), 即: String -> Date

1.2 构造方法

public SimpleDateFormat()
解释: 根据空参构造, 创建SimpleDateFormat类的对象.
public SimpleDateFormat(String pattern)
解释: 根据给定的模板, 创建其对应的SimpleDateFormat类的对象.

1.3 成员方法

public final String format(Date date)
解释: 用来格式化日期的.
public Date parse(String source)
解释: 用来解析字符串形式的日期的.

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

/*
SimpleDateFormat 类: 简单的格式化时间的一个类

构造方法:
public SimpleDateFormat();
public SimpleDateFormat(String parrent);

成员方法:

format  格式化日期输出字符串
parse   输入字符串转换为日期

 */
public class Demo02 {
    // 此处为抛出异常,之后会讲
    public static void main(String[] args) throws ParseException {
        // 构造对象
        SimpleDateFormat sdf = new SimpleDateFormat();
        System.out.println(sdf);

        // 使用传入的规则创建一个sdf对象
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd'\t'HH:mm:ss");

        //将日期格式化为字符串
        Date d1 = new Date();
        //空参构造格式化
        String format = sdf.format(d1);
        // 带时间格式的构造格式化
        String format2 = sdf1.format(d1);

        System.out.println(format); // "22-1-25 上午11:38"
//        dateString ds1 = "Tue Jan 25 11:15:38 CST 2022";
        System.out.println(format2);// "2022-01-25 11:39:14"
        //将字符串格式化为日期
        // 将字符串转换为Date类型时,要注意sdf对象的时间格式,要和字符串的格式相匹配,否则就会转换失败而报错
        // 此处系统判断我们可能出现异常,所以强制我们处理异常,或者抛出异常
//        Date parse = sdf1.parse("22-1-25 上午11:38");
        Date parse = sdf1.parse("2022-01-25    11:39:14");

        System.out.println(parse);


    }
}

1.4 练习

• 定义工具类DateUtils, 该类有两个方法: date2String(), string2Date(), 分别用来格式化, 解析日期.
• 在测试类中, 测试上述的两个方法.
• 注意: 解析日期字符串时, SImpleDateFormat对象的模板要和被解析的字符串格式保持一致.

public class Demo03 {
    public static void main(String[] args) throws ParseException {
        // Date>> String
        Date d1 = new Date();
        System.out.println(DateUtils.Date2String(d1, "yyyy年MM月dd日  HH时:mm分"));
        
        // String>> Date 
        String dateStr = "2022年01月25日  11时:56分";
        Date d2 = DateUtils.String2Date(dateStr, "yyyy年MM月dd日  HH时:mm分");

        System.out.println(d2);
    }
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtils {
    //工具类的思想:
    //1. 构造方法私有
    private DateUtils(){

    }

    //2. 所有方法静态
    public static String Date2String(Date date, String parrent) {
        // 创建一个sdf对象
        SimpleDateFormat sdf = new SimpleDateFormat(parrent);
        //格式化
        String dateStr = sdf.format(date);
        //返回结果
        return dateStr;
    }

    public static Date String2Date(String dateStr, String parrent) throws ParseException {
        // 创建一个sdf对象
        SimpleDateFormat sdf = new SimpleDateFormat(parrent);
        // 解析
        Date date = sdf.parse(dateStr);
        // 返回
        return date;
    }
}

2. Calendar类

2.1 概述

Calendar类叫: 日历类, 是方便我们操作日期的. 它里边的功能大多数是用来替代java.util.Date类的功能的.

2.2 构造方法

Calendar类可以理解为是工具类, 因为它是一个抽象类, 所以外界无法通过new的方式创建本类对象.
问题: 如何创建Calendar类的对象呢?
答案: 通过Calendar#getInstance()方法实现.

2.3 成员变量

public static final int YEAR
解释: 表示年份.
public static final int MONT
解释: 表示月份.
public static final int DATE
解释: 表示年中的某一天.
public static final int DAYOFMONTH
解释: 表示月中的某一天.
public static final int DAYOFWEEK
解释: 表示星期中的某一天.

2.4 成员方法

public static Calendar getInstance();
解释: 创建Calendar类型的子类对象.
public int get(int field)
解释: 根据日历字段, 获取其对应的值.
public void set(int year, int month, int day)
解释: 设置时间为指定的年, 月, 日.
public void add(int field, int count)
解释: 修改指定的时间为指定的偏移量, 例如: 往前推2天, 推3个月, 往后推2年.

import java.util.Calendar;

/*
Calendar 帮助我们去记录和使用时间的一个类,目前已经基本替换Date, JDK1.1
那为什么不删除Date呢??? 因为jdk要进行向下兼容 例如1.8版本要兼容1,8之前的所有版本,所以不能删除
*/
public class Demo01 {
    public static void main(String[] args) {
        // Calendar 是一个抽象类,不能进行实例化,但是我们想使用他
        // 在类中给了一个getinstance这个方法,内部返回了一个Calendar的子类对象.
        // 如果想要使用Calendar构造方法创建一个类,就需要实现其所有抽象方法.
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        // 获取当前的一些时间(静态变量)
        // Calendar.DATE 这个是给 Calendar添加或者删减数据用
//        System.out.println(Calendar.DATE); // 5
//        System.out.println(Calendar.MONTH); // 2
//        System.out.println(Calendar.YEAR); // 1
//        System.out.println(Calendar.WEEK_OF_MONTH); // 4

        // 计算机中month中0代表的是1月, 1代表2月  以此类推
        // 星期,月份在Calendar类中都有对应的常量代表
        calendar.set(2022, 0, 25);
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

        //使用add 给DATE 添加4天
        calendar.add(Calendar.DATE, 4);
        calendar.add(Calendar.MONTH, -4);
        // 获取添加4天后是这一年的第几天
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
        // 如果再Calendar使用过程中,进行了一系列操作将日期,月份或者年份进行减少或增加进入了下一个月年  都会进行记录
        // 所以我们再开发中你可以使用Calendar进行计算.
        System.out.println(calendar.get(Calendar.YEAR)); // 2021年
    }
}

2.5 练习

public static void main(String[] args) {
    //1. 创建一个Scanner对象
    Scanner sc = new Scanner(System.in);
    //2.提示并获取用户输入的年份
    System.out.println("请输入您要查询的年份:");
    int year = sc.nextInt();
    //3.创建一个calendar对象,将年份传入
    Calendar c1 = Calendar.getInstance();
    //4.将3月1日传入Calendar对象  ,此处是3月1日,所以MONTH应该传2
    c1.set(Calendar.YEAR, year);
    c1.set(Calendar.MONTH, 2);
    c1.set(Calendar.DATE, 1);
    //5.从当前calendar对象中减去一天,
    c1.add(Calendar.DATE, -1);
    //6.获取当月的日期,就是当年2月份的天数
    System.out.println("二月份的天数是:" + c1.get(Calendar.DATE));
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。