一、Date类
1.1、Date概述
java.util.Date`类 表示特定的瞬间,精确到毫秒。
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,我们重点看以下两个构造函数
public Date()
:从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。public Date(long date)
:将指定参数的毫秒值date,转换成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
说明:由于中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快8小时的时区,当格林尼治标准时间为0:00时,东八区的标准时间为08:00。
简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。例如:
package com.demo.demo01;
import java.util.Date;
public class Demo01Date {
public static void main(String[] args) {
// 创建日期对象,把当前的时间
System.out.println(new Date()); // Thu Aug 01 14:15:36 CST 2024
// 创建日期对象,把当前的毫秒值转成日期对象
System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
}
}
1.2、构造方法
方法名 | 说明 |
---|---|
public Date() | 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒 |
public Date(long date) | 分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数 |
package com.demo.demo01;
import java.util.Date;
/**
* @Author: 史小创
* @Time: 2024/8/1 下午2:20
* @Description: Date的构造方法
*/
public class Demo02Date {
public static void main(String[] args) {
// public Date():分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
Date date = new Date();
// 内部的Date类,肯定将toString方法进行了重写,所以我们得到的不是一个地址;
System.out.println(date);
// 使用本地化的一个字符串形式来查看日期
System.out.println(date.toLocaleString());
// public Date(long date):分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
Date date1 = new Date(10000);
System.out.println(date1.toLocaleString());
}
}
1.3、常用的API
package com.demo.demo01;
import java.util.Date;
/**
* @Author: 史小创
* @Time: 2024/8/1 下午2:24
* @Description: Date的常用API
*/
public class Demo03Date {
public static void main(String[] args) {
System.out.print("getTime获取时间的毫秒数:");
System.out.println(new Date().getTime());
System.out.println("两个日期进行比较:");
Date date1 = new Date();
Date date2 = new Date(date1.getTime() + 10000);
System.out.println(date2.compareTo(date1));
// equals方法:用于2个日期的比较(与元年所相差的毫秒数是一样的则返回true,否则返回false)
// 注意!Object类中的equals方法比较的是对象的内存地址,而在Date中则不同,说明在Date类中equals方法是重写过的,比较的是相差的毫秒数;
boolean is = date2.equals(date1);
System.out.println(is);
Date date3 = new Date(date1.getTime());
is = date1.equals(date3);
System.out.println(is);
}
}
1.4 、附加内容
在Java语言中,除了java.util包下有一个Date类之外,在java.sql包下也有一个Date类,都是用于表示日期的。
-
1、java.util.Date 是 java.sql.Date的父类;
-
2、java.util.Date是用于Java程序中(Java类);
-
3、java.sql.Date是用于数据库结合操作的类型;
Java程序(日期) -------------------------添加数据--------------------------数据库中
数据库中数据(日期)----------------------查询-----------------------Java程序中
以上的这个操作过程是在所难免的,那么必然会涉及到java.util.Date 与 java.sql.Date之间的转换。
package com.demo.demo01;
import java.sql.Date;
/**
* @Author: 史小创
* @Time: 2024/8/1 下午2:33
* @Description: java.util.Date 与 java.sql.Date之间的转换。
*/
public class Demo04Date {
public static void main(String[] args) {
// 将sql包的下Date-----转换为------util包下的Date
// 想定义一个2000-12-12的日期,可以使用java.sql.Date
// 将字符串转换为sql包下的Date的做法
java.sql.Date date = java.sql.Date.valueOf("2000-12-12");
System.out.println(date);
// 如何将这个date日期转换为 java.util.Date
Date myDate = new Date(date.getTime());
System.out.println(myDate.toLocaleString());
// 如何将util包下的Date-------转换为------sql包下的Date
java.sql.Date myDate1 = new java.sql.Date(myDate.getTime());
System.out.println(myDate1);
}
}
二、SimpleDateFormat工具类
SimpleDateFormat类概述:SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。
SimpleDateFormat类构造方法
方法名 | 说明 |
---|---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认模式和日期格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 |
SimpleDateFormat类的常用方法
- 格式化(从Date到String)
- public final String format(Date date):将日期格式化成日期/时间字符串
- 解析(从String到Date)
- public Date parse(String source):从给定字符串的开始解析文本以生成日期
package com.demo.demo01;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author: 史小创
* @Time: 2024/8/1 下午2:40
* @Description: SimpleDateFormat工具类
*/
public class Demo05Date {
public static void main(String[] args) throws ParseException {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = sdf.format(date);
System.out.println(s);
System.out.println("--------");
// 从 String 到 Date
String ss = "2048-08-09 11:11:11";
// ParseException
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(ss);
System.out.println(dd);
System.out.println("--------");
try {
// 定义的字符串的格式必须要和定义的模式一致,否则会抛出异常
java.util.Date myDate = sdf2.parse("2000-10-10 10-10-10");
System.out.println(myDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
提示!
对于编写格式所使用的各种代表字母符号,掌握常规的年月日时分秒即可,其余了解即可。
三、Calendar日历
Calendar类概述
-
Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
-
Calendar 提供了一个类方法 getInstance 用于获取这种类型的一般有用的对象。
-
该方法返回一个Calendar 对象。
-
其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();
Calendar类常用方法
方法名 | 说明 |
---|---|
public int get(int field) | 返回给定日历字段的值 |
public abstract void add(int field, int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日历字段 |
public final void set(int year,int month,int date) | 设置当前日历的年月日 |
package com.demo.demo01;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CalendarDemo {
public static void main(String[] args) throws ParseException {
// 获取日历类对象
Calendar c = Calendar.getInstance();
// public int get(int field):返回给定日历字段的值
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
// public abstract void add(int field, int amount):根据日历的规则,将指定的时间量添加或减去给定的日历字段
System.out.println("需求1:3年前的今天");
c.add(Calendar.YEAR, -3);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1;
date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
System.out.println("需求2:10年后的10天前");
c.add(Calendar.YEAR, 10);
c.add(Calendar.DATE, -10);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1;
date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
// public final void set(int year,int month,int date):设置当前日历的年月日
c.set(2050, 10, 10);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1;
date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
System.out.println("计算两个日期的时间差:");
calculateTimeDifferenceByCalendar("2008/08/08");
}
/**
* 使用Calendar对象计算时间差,可以按照需求定制自己的计算逻辑
*
* @param strDate
* @throws ParseException
*/
public static void calculateTimeDifferenceByCalendar(String strDate) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
Date date = formatter.parse(strDate);
Calendar c1 = Calendar.getInstance(); // 当前日期
Calendar c2 = Calendar.getInstance();
c2.setTime(date); // 设置为另一个时间
int year = c1.get(Calendar.YEAR);
int oldYear = c2.get(Calendar.YEAR);
// 这里只是简单的对两个年份数字进行相减,而没有考虑月份的情况
System.out.println("传入的日期与今年的年份差为:" + (year - oldYear));
}
}