主要从以下三方面讲解:
Date 类主要提供了两个构造函数(其他的均过时了,有@Deprecated修饰):
//使用当前日期和时间来初始化对象
public Date() {
this(System.currentTimeMillis());
}
//date参数是从1970年1月1日起的毫秒数
public Date(long date) {
fastTime = date;
}
方法 | 描述 |
---|---|
boolean after(Date date) | 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。 |
boolean before(Date date) | 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。 |
int compareTo(Date date) (掌握) | 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
boolean equals(Object date) | 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 |
long getTime( ) | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
void setTime(long time) | 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。 |
int hashCode( ) | 返回此对象的哈希码值。 |
String toString( ) | 把此 Date 对象转换为以下形式输出 // “EEE MMM dd HH:mm:ss zzz yyyy”; |
Object clone( ) | 返回此对象的副本。 |
我们一般用它来进行日期的格式化和分析。直接上代码:(掌握)
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("G yyyy-MM-dd HH:mm:ss.SSS");
String str = sdf.format(now);
System.out.println(str);
String parseStr = "公元 2024-01-22 16:58:33.126";
try {
Date date = sdf.parse(parseStr);
System.out.println(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
输出如下:
公元 2024-01-22 17:01:27.194
Mon Jan 22 16:58:33 CST 2024
时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:
字母 | 描述 | 示例 |
---|---|---|
G | 纪元标记 | 公元 |
y | 四位年份 | 2023 |
M | 月份 | July or 07 |
d | 一个月的日期 | 10 |
h | A.M./P.M. (1~12)格式小时 | 11 |
H | 一天中的小时 (0~23) | 21 |
m | 分钟数 | 23 |
s | 秒数 | 56 |
S | 毫秒数 | 234 |
E | 星期几 | Tuesday |
D | 一年中的日子 | 360 |
w | 一年中第几周 | 20 |
W | 一个月中第几周 | 2 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | CST |
当我们需要设置或获取日期数据的特定部分时,需要进行特定部分的加减时,可以使用Calendar 类。
Calendar对象的创建
Calendar c = Calendar.getInstance();//默认是当前日期
Calenda****类对象字段类型
常量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期,和上面的字段意义完全相同 |
Calendar.HOUR | 12小时制的小时 |
Calendar.HOUR_OF_DAY | 24小时制的小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 星期几 |
方法 | 描述 |
---|---|
public final void set(int year, int month, int date) | 通过年月日参数设置,注意month值的范围,0~11,即0代表1月 |
public final void set(int year, int month, int date, int hourOfDay, int minute) | 通过年月日时分设置 |
public final void set(int year, int month, int date, int hourOfDay, int minute, int second) | 通过年月日时分秒设置 |
public void set(int field, int value) | 利用字段类型设置对应的值 |
public int get(int field) | 利用字段类型获取对应的值 |
public void setTimeInMillis(long millis) | 通过时间戳设置时间 |
public long getTimeInMillis() | 获取当前对象的时间戳 |
abstract public void add(int field, int amount); 通过debug发现,该抽象方法由GregorianCalendar中的方法实现: public void add(int field, int amount) | 在指定字段类型上加减时间。 amount 为正数即为加,为负数即为减。 |
实际的项目中,会经常用到 Instant 、LocalDate、LocalTime、LocalDateTime,这几个类是java1.8 新增的,我们放在后续详解。