Java 常用类 08. Java 日期操作类
2021-12-18 本文已影响0人
yjtuuige
Java 中4种常用日期类:
- Date 类
- Calendar 类
- DateFormat 类
- SimpleDateFormat 类
- Date 类
- Date 表示特定的瞬间,精确到毫秒。Date 类中的大部分方法都已被 Calendar 类中的方法所取代。
- 时间单位:
1 秒 = 1000 毫秒
1 毫秒 = 1000 微秒
1 微秒 = 1000 纳秒
Date 类所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:
- 年份 y 由整数 y - 1900 表示。
- 月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
- 日期(一月中的某天)按通常方式由整数 1 至 31 表示。
- 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。
- 分钟按通常方式由 0 至 59 的整数表示。
- 秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。
构造方法:
-
Date(long date)
,使用给定的毫秒时间值构造一个 Date 对象,不传值,默认是当前时间。
常用方法:
方法 | 描述 |
---|---|
public long getTime() |
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
public void setTime(long date) |
设置时间,以毫秒为单位 |
boolean after(Date when) |
测试此日期是否在指定日期之后。 |
boolean before(Date when) |
测试日期是否在指定日期之前。 |
int compareTo(Date anotherDate) |
比较两个日期的顺序。如果参数 Date 等于此 Date,则返回值 0;如果此 Date 在 Date 参数之前,则返回小于 0 的值;如果此 Date 在 Date 参数之后,则返回大于 0 的值。 |
- 实例
package com.base.demo05;
import java.util.Date;
public class Demo01 {
public static void main(String[] args) {
// 1.创建 Date 对象
Date date1 = new Date();
// 打印当前时间
System.out.println("当前时间:"+date1);
System.out.println(date1.toString());
System.out.println(date1.toLocaleString()); // 已弃用
// 返回时间毫秒数 自1970开始
System.out.println("毫秒数:"+date1.getTime());
// 创建date1副本
Object clone = date1.clone();
System.out.println(clone);
// 2.创建昨天的时间对象
Date date2 = new Date(date1.getTime() - (60 * 60 * 24 * 1000));
System.out.println("昨天时间:"+date2.toLocaleString());
// 3.方法 before() 之前
boolean b1 = date1.before(date2);
System.out.println(b1);
// after() 之后
boolean after = date1.after(date2); // false
System.out.println(after); // true
// compareTo() 比较时间 大于返回1,小于返回-1,等于返回0
int i = date1.compareTo(date2);
System.out.println(i); // 1
// equals() 判断两个时间是否相等
System.out.println(date1.equals(date2)); // false
System.out.println(date1.equals(clone)); // true
}
}
- 运行结果
- Calendar 类
-
简介:Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
-
构造方法:
protected Calendar();
由于修饰符是protected
,所以无法直接创建该对象。需要通过别的途径生成该对象。// 创建 Calendar 对象 Calendar date1 = Calendar.getInstance();
-
常用方法
方法 | 描述 |
---|---|
static Calendar getInstance() |
使用默认时区和区域获取日历 |
void set(int year,int month, int date, int hourOfDay,int minute,int second) |
设置年、月、日、时、分、秒。 |
public int get(int field) |
返回指定字段的值。字段如年、月、日等 |
void setTime(Date date) |
使用给定的 Date 设置此 Calendar 的时间。 |
Date getTime() |
返回一个表示此 Calendar 时间值的 Date 对象。 |
void add(int field,int amount) |
按照日历的规则,给指定字段添加或减少时间 |
long getTimeMillies() |
以毫秒为单位返回该日历的时间值。 |
getActualMaximum() |
获取时间最大值 |
getActualMinimum() |
获取时间最小值 |
- Calendar 类中的常量
常量 | 描述 |
---|---|
Calendar.YEAR |
取得年 |
Calendar.MONTH |
取得月 |
Calendar.DAY_OF_MONTH |
取得日 |
Calendar.HOUR_OF_DAY |
取得小时,24小时制 |
Calendar.HOUR |
取得小时,12小时制 |
Calendar.MINUTE |
取得分 |
Calendar.SECOND |
取得秒 |
Calendar.MILLISECOND |
取得毫秒 |
Calendar.DAY_OF_WEEK |
取得星期几 |
- 实例
package com.base.demo05;
import java.util.Calendar;
public class Demo02 {
public static void main(String[] args) {
// 1.创建 Calendar 对象
Calendar date1 = Calendar.getInstance();
System.out.println(date1.getTime().toLocaleString());
// 毫秒值
System.out.println(date1.getTimeInMillis());
// 2.获取时间信息
// 年
int year = date1.get(Calendar.YEAR);
// 月 (获取的月值,需要+1)
int month = date1.get(Calendar.MONTH);
// 日 或 DAY_OF_MONTH
int day = date1.get(Calendar.DATE);
// 小时: HOUR_OF_DAY 24小时; HOUR 12小时
int hour = date1.get(Calendar.HOUR_OF_DAY);
// 分钟
int minute = date1.get(Calendar.MINUTE);
// 秒
int second = date1.get(Calendar.SECOND);
// month 月值需要+1
System.out.println(year + "年" + (month + 1) + "月"
+ day + "日 " + hour + ":" + minute + ":" + second);
// 3.修改时间
Calendar date2 = Calendar.getInstance();
// 修改 DATE 日
date2.set(Calendar.DATE, 15);
System.out.println(date2.getTime().toLocaleString());
// 增减时间 add() 正数为增加,负数为减少 -1
date2.add(Calendar.YEAR,-2);
System.out.println(date2.getTime().toLocaleString());
// 4.补充方法 getActualMaximum() 获取时间最大、最小值
// 获取 当月的最大,最小值
int max = date2.getActualMaximum(Calendar.DATE);
int min = date2.getActualMinimum(Calendar.DATE);
System.out.println(max);
System.out.println(min);
}
}
- 运行结果
- DateFormat 类
- DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。
- 将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。
- 在创建 DateFormat 对象时不能使用 new 关键字,而应该使用 DateFormat 类中的静态方法 getDateInstance(),示例代码如下:
DateFormat df = DateFormat.getDatelnstance();
- 常用方法
方法 | 描述 |
---|---|
String format(Date date) |
将 Date 格式化日期/时间字符串 |
Calendar getCalendar() |
获取与此日期/时间格式相关联的日历 |
static DateFormat getDateInstance() |
获取具有默认格式化风格和默认语言环境的日期格式 |
static DateFormat getDateInstance(int style) |
获取具有指定格式化风格和默认语言环境的日期格式 |
static DateFormat getDateInstance(int style, Locale locale) |
获取具有指定格式化风格和指定语言环境的日期格式 |
static DateFormat getDateTimeInstance() |
获取具有默认格式化风格和默认语言环境的日期/时间 格式 |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle) |
获取具有指定日期/时间格式化风格和默认语言环境的 日期/时间格式 |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale locale) |
获取具有指定日期/时间格式化风格和指定语言环境的 日期/时间格式 |
static DateFormat getTimeInstance() |
获取具有默认格式化风格和默认语言环境的时间格式 |
static DateFormat getTimeInstance(int style) |
获取具有指定格式化风格和默认语言环境的时间格式 |
static DateFormat getTimeInstance(int style, Locale locale) |
获取具有指定格式化风格和指定语言环境的时间格式 |
void setCalendar(Calendar newCalendar) |
为此格式设置日历 |
Date parse(String source) |
将给定的字符串解析成日期/时间 |
实例:
package com.base.demo05;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class Demo04 {
public static void main(String[] args) {
DateFormat df1 = DateFormat.getDateInstance();
DateFormat df2 = DateFormat.getDateTimeInstance();
DateFormat df3 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,
new Locale("zh", "CN"));
DateFormat df4 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,
DateFormat.ERA_FIELD,new Locale("zh",
"CN"));
System.out.println(df1.format(new Date()));
System.out.println(df2.format(new Date()));
System.out.println(df3.format(new Date()));
System.out.println(df4.format(new Date()));
}
}
运行结果:
- SimpleDateFormat 类
- SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
- 进行格式化(日期→文本)、解析(文本→日期)
- 常用的时间模式字母
字母 | 日期或时间 | 示例 |
---|---|---|
y | 年 | 2021 |
M | 年中月份 | 08 |
d | 月中天数 | 10 |
D | 年份中的天数中天数 | 295 |
H | 一天中小时(0-23) | 22 |
h | 一天中小时(1~12) | 11 |
m | 分钟 | 16 |
s | 秒 | 59 |
S | 毫秒 | 356 |
E | 星期几 | 星期四 |
- 常用方法
方法 | 描述 |
---|---|
public Date parse(String source)throws ParseException |
将一个包含日期的字符串变为 Date 类型 |
public final String format(Date date) |
将一个 Date 类型按照指定格式变为String 类型 |
- 实例
package com.base.demo05;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo03 {
public static void main(String[] args) {
// 1.创建 SimpleDateFormat 对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 2.创建时间
Date date1 = new Date();
// 3.格式化 format(date1) 把日期转换成字符串
String str = sdf.format(date1);
System.out.println(str);
// 把字符串转换成日期 parse() 字符串要和创建对象的格式一致 此处会有异常,需要处理
try {
Date date2 = sdf.parse("2022-12-12 12:12:12");
System.out.println(date2);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
- 运行结果
- 格式未对应,报异常
总结
- 日期的操作,一般用的最多的就是对日期进行格式化,SimpleDateFormat 类用起来更方便。