日期类

1.1 Date类描述和构造方法
Date 代表了一个特定的时间,精确到毫秒
public Date() 分配一个Date对象,并初始化,仪表它代表它被分配的时间,精确到毫秒
public Date(long date) 分配一个Date对象,并初始化为表示从标准基准时间起指定的毫秒数

// public Date() :
public static void main(_String[] args) {
Date date = new Date();
System._out
.println(_date); }
// _Wed Aug 25 16:59:27 CST 2021
// CST 中国时间

// public Date(long date): 需要带有long 类型的参数
long date1 = 10006060;
Date date2 = new Date(_date1);
System._out
.println(_date2)_;
// Thu Jan 01 09:00:00 CST 1970
// 因为是CST时间,时间为东8区所以返回的9:00(应该是1:00)

1.2 Date类的常用方法
public long getTime() 获取的是日期对象从1970年1月1日 00:00:00 到现在的毫秒值
public long setTime(long time) 设置时间,给的是毫秒值
// public long getTime() :
System.out.println(_date.getTime());
// 1629882612290 该时间就是现在到1970年的毫秒值
System._out
.println(_date.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + “年”);
// 51.683241823630134年
// public long setTime(long time) : System._currentTimeMillis()
; 获取当前时间
long time = System.currentTimeMillis();
date.setTime(_time);
System._out
.println(_date)_;
// Wed Aug 25 17:13:56 CST 2021

1.3 SimpleDateFormat 类概述
SimpleDateFormat 类是一个具体的类,用于区域设置敏感的方式格式化和解析日期
重点学习:日期格式化和解析
日期和时间由日期和时间模式字符串指定 从’A’到’Z’ 以及从’a’到’z’
常用的模式字母以及对应关系如下:
y 年
M 月
d 日
H 时
m 分
s 秒
常用格式: yyyy-MM-dd HH:mm:ss (年/月/日 时/分/秒)

public SimpleDateFormat () 构造一个SimpleDateFormat ,使用默认模式和日期格式
public SimpleDateFormat (String pattern) 构造一个SimpleDateFormat 使用给定的模式和日期格式

格式化(从 Date 到 String )
public final String format(Date date): 将日期格式化日期/时间字符串
解析(从 String 到 Date)
public Date parse(String source): 从给定字符串的开始解析文本以生成日期
public static void main(_String[] args) throws ParseException {
// 格式化(从 Date 到 String ) public final String format(Date date):
Date date = new Date
();
// 无参构造方法 SimpleDateFormat() — 21-8-25 下午5:50
// SimpleDateFormat sdf = new SimpleDateFormat();
// ctrl+v 生成左边的字符串对象 format
// 带参构造方法 SimpleDateFormat (String pattern) — 2021-08-25 17:50:42
SimpleDateFormat sdf = new SimpleDateFormat
(“yyyy-MM-dd HH:mm:ss”);
String format = sdf.format
(date);
System._out
.println(_format);
System._out
.println(“—————————“);

  1. // 解析(从 String 到 Date) public Date parse(String source):<br /> // 创建一个字符串s 给定一个时间<br /> String s = "2021-08-25 11:11:11";<br /> SimpleDateFormat ssdf = new SimpleDateFormat_(_"yyyy-MM-dd HH:mm:ss"_)_;<br /> // parse异常,使用alt+enter 默认选择异常签名<br /> Date date1 = ssdf.**parse**_(_s_)_;<br /> System._out_.println_(_date1_)_; _}_

案例:日期工具类

需求:定义一个日期工具类(DateUtils),包含两个方法,把日期转换为指定格式的字符串; 把字符串解析为指定格式的日期,然后定义一个测试类(DateDemo),测试日期工具类的方法
思路:
① 定义日期工具类(DateUtils)
② 定义一个方法dateToString, 用于把日期转为指定格式的字符串
定义一个方法需要有
返回值类型: String
参数: Date date , String format
③ 定义一个方法stringToDate, 用于把字符串解析为指定格式的日期
定义方法需要有:
返回值类型: Date
参数: String string, String format
④ 定义测试类DateDemo, 调用日期工具类中的方法
/ 工具类
构造方法私有
成员方法静态
/
public class DateUtils {
// 构造方法私有
private DateUtils(){}
/ 成员方法静态(dateToString),Date 导包,format是按照指定的String格式
用于把日期转为指定格式的字符串
返回值类型: String
参数: Date date , String format
/
public static String dateToString(_Date date, String format){
SimpleDateFormat sdf = new SimpleDateFormat(format);
String s = sdf.format
(date);
return s;
}
/ 成员方法静态(stringToDate),Date 导包,format是按照指定的String格式
用于把字符串解析为指定格式的日期
返回值类型: Date
参数: String string, String format
使用添加异常签名方法解决parse异常报错
/
public static Date stringToDate
(String s, String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = sdf.parse
(s);
return d;
} }
——————————————————————-
public class DateDemo
{
public static void main(String[] args) throws ParseException {
// 创建日期对象
Date date = new Date
();
// 调用工具类的方法,dateToString(两个参数:date对象,以及定义的格式)
// ctrl+v 生产实例对象
String s = DateUtils._dateToString(_date, “yyyy-MM-dd HH:mm:ss”
);
System._out
.println(_s);
System._out
.println(“——————————-“);
// 创建字符串对象
String s1 = “2048年2月3日 12:11:10”;
// 调用工具类的方法,stringToDate(两个参数:String 类型,以及定义的格式)
// 强烈建议使用 ctrl+v 生产实例对象,传来的格式需要和定义格式匹配
Date date1 = DateUtils.stringToDate(_s1, “yyyy年MM月dd日 HH:mm:ss”);
System._out
.println(_date1); } }
1.4 Calendar 类概述
Calendar 为某一时刻和一组日历字段之间的转换提供了一些方法, 并为操作日历字段提供了一些方法
Calendar 提供了一个类方法getInstance 用于获取
public static void main
(String[] args) {
// 获取对象 , 如果一个方法的返回值类型是抽象类,需要该类的子类对象
Calendar calendar = Calendar._getInstance()
; // 多态形式
// System.out.println(calendar);
// public int get(int field) 给定的日历字段返回对应的值
int y = calendar.get(_Calendar._YEAR);
int m = calendar.get(_Calendar._MONTH) + 1;
int d = calendar.get(_Calendar._DATE);
System.out.println(_y + “年” + m + “月” + “日” + d);
// 2021年8月日27
}
1.5 Calendar 的常用方法
public int get(int field) 返回给定日历字段的值(int field)
// public int get(int field) 给定的日历字段返回对应的值
int y = calendar.get
(Calendar._YEAR);
int m = calendar.get(_Calendar._MONTH) + 1;
int d = calendar.get(_Calendar._DATE);
System.out.println(y + “年” + m + “月” + “日” + d);
// 2021年8月日27 }
public abstract void add(int field,int amount)
根据日历的规则,将指定的时间量添加或减去给定的日历字段
// public abstract void add(int field,int amount)
// 根据日历的规则,将指定的时间量添加或减去给定的日历字段
// 1、需求是三年前的今天,所以amount :-3
calendar.add(_Calendar._YEAR,-3);
// 2018年8月日27
// 2、需求是十年后的五天前,所以YEAR amount :10;DATE amount :-5
calendar.add(_Calendar._YEAR,10);
calendar.add(_Calendar._DATE,-5);
// 2031年8月日22
int y = calendar.get(_Calendar._YEAR);
int m = calendar.get(_Calendar._MONTH) + 1;
int d = calendar.get(_Calendar._DATE);
System.out.println(_y + “年” + m + “月” + “日” + d);
public final void set(int year,int month,int date) 设置当前日历的
// public final void set(int year,int month,int date) 设置当前日历的
calendar.set
(2048,10,11);
int y = calendar.get
(Calendar._YEAR);
int m = calendar.get(_Calendar._MONTH) + 1;
int d = calendar.get(_Calendar._DATE);
System.out.println(_y + “年” + m + “月” + “日” + d)_;
// 2048年11月日11

案例:二月天

需求:获取任意一年的二月有多少天

思路:
① 键盘录入任意的年份
② 设置日历对象的年、月、日
年:键盘录入
月:设置为3月,月份从0开始,所以设置的值是2
日:设置为1日
③ 3月1日往前推一天,就是二月的最后一天
④ 获取这一天输出即可
代码实现:
public static void main(_String[] args) {
// ① 键盘录入任意的年份
Scanner scanner = new Scanner
(System._in);
System.out.println(“输入年份”);
// 获取年份
int y = scanner.nextInt();
// Calendar 无法直接实例,多态形式
Calendar calendar = Calendar.getInstance();
// ② 设置日历对象的年、月、日
calendar.set(y,3,1);
// 月:设置为3月,月份从0开始,-1就是二月的最后一天,所以得到的值是2
calendar.add(_Calendar._DATE,-1);
// 日:设置为1日
int d = calendar.get(_Calendar._DATE);
System.out.println(_y+ “二月份天数” + d); }_