大数据基础之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));
}
- 点赞
- 收藏
- 关注作者
评论(0)