目录
前言
一、Date类
1.基本概念
2. 常见方法
2.1日期比较
2.2 使用 SimpleDateFormat 格式化日期
二、DateFormat类
1. 基本概念
2. 常见方法
2.1 构造方法
2.2DateFormat类常用方法
三、Calendar类
1. 基本概念
2. 常用方法
2.1 构造方法
2.2常用方法
总结
前言
最近在实习过程中遇到了许多处理日期时间相关的需求,例如时间的加减及时间格式的互相转换。Java早期通过使用Date来计算时间,后来大部分Date类的方法都过时了,又转而希望用Calendar类代替Date类,然而Calendar类也是不尽如人意。因此专门在本文中对Java中Date类的基本概念、常见操作及相关类进行总结和归纳,方便日后的开发,希望对大家有所帮助。
一、Date类
1.基本概念
java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。
第一个构造函数使用当前日期和时间来初始化对象。
Date()
第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
Date(longmillisec)
Date date2= new Date();System.out.println(date2);//参数表示1970-01-01 00:00:00到指定时间的毫秒数Date date1 = new Date(14686531L);System.out.println(date1);
2. 常见方法
2.1日期比较
Java使用以下三种方法来比较两个日期:
- 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
- 使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
- 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
2.2 使用 SimpleDateFormat 格式化日期
因为使用Date类与字符串时间相互转化十分困难,因此,可以考虑通过Date类的其他子类来间接进行转换。DateFormat是日期/时间格式化子类的抽象类,它与以语言无关的方式格式化并解析日期或时间,是抽象类。所以使用其子类SimpleDateFormat实现日期和字符串的相互转换。
public static void main(String[] args) throws Exception {// 定义输出格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 将字符串转化为日期 Date date = sdf.parse("2023-11-11 11:11:11");System.out.println(date);Date date = new Date();// 将日期转化为字符串SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");String str = sdf.format(date);System.out.println(str);}
二、DateFormat类
1. 基本概念
java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
- 格式化:按照指定的格式,从Date对象转换为String对象。(format)
- 解析:按照指定的格式,从String对象转换为Date对象。(parse)
2. 常见方法
2.1 构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
参数pattern是一个字符串,代表日期时间的自定义格式。
格式规则
常用的格式规则为:
标识字母(区分大小写) | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
创建SimpleDateFormat对象的代码如下:
import java.text.DateFormat;import java.text.SimpleDateFormat;public class Demo02SimpleDateFormat {public static void main(String[] args) {// 对应的日期格式如:2023-11-11 11:11:11DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");}}
2.2DateFormat类常用方法
DateFormat类的常用方法有:
1. public String format(Date date)
:将Date对象格式化为字符串。
format方法的代码如下:
import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;/* 把Date对象转换成String*/public class Demo03DateFormatMethod {public static void main(String[] args) {Date date = new Date();// 创建日期格式化对象,在获取格式化对象时可以指定风格DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");String str = df.format(date);System.out.println(str); // 2020年09月19日}}
2. public Date parse(String source)
:将字符串解析为Date对象。
parse方法的代码如下:
import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/* 把String转换成Date对象*/public class Demo04DateFormatMethod {public static void main(String[] args) throws ParseException {DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");String str = "2023年11月11日";Date date = df.parse(str);System.out.println(date); // Tue Dec 11 00:00:00 CST 2023}}
三、Calendar类
1. 基本概念
我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
java.util.Calendar
是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
2. 常用方法
2.1 构造方法
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:
Calendar静态方法
public static Calendar getInstance()
:使用默认时区和语言环境获得一个日历
例如:
import java.util.Calendar;public class Demo06CalendarInit {public static void main(String[] args) {Calendar cal = Calendar.getInstance();}}
2.2常用方法
根据Calendar类的API文档,常用方法有:
- public int get(int field):返回给定日历字段的值。
- public void set(int field, int value):将给定的日历字段设置为给定值。
- public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
- public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
Calendar类中提供很多成员常量,代表给定的日历字段:
字段值 | 含义 |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周几,周日为1,可以-1使用) |
1.get/set方法
get方法用来获取指定字段的值,set方法用来设置指定字段的值。代码实例如下:
import java.util.Calendar;public class Demo {public static void main(String[] args) {// 创建Calendar对象Calendar cal = Calendar.getInstance();// 获取年 int year = cal.get(Calendar.YEAR);// 获取月int month = cal.get(Calendar.MONTH) + 1;// 获取日int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);System.out.print(year + "年" + month + "月" + dayOfMonth + "日");}}
import java.util.Calendar;public class Demo07CalendarMethod {public static void main(String[] args) {Calendar cal = Calendar.getInstance();// 设置年cal.set(Calendar.YEAR, 2023);// 获取年int year = cal.get(Calendar.YEAR);// 获取月int month = cal.get(Calendar.MONTH) + 1;// 获取日int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);System.out.print(year + "年" + month + "月" + dayOfMonth + "日");}}
2. add方法
add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量。代码如:
import java.util.Calendar;public class Demo08CalendarMethod {public static void main(String[] args) {Calendar cal = Calendar.getInstance();// 获取年int year = cal.get(Calendar.YEAR);// 获取月int month = cal.get(Calendar.MONTH) + 1;// 获取日int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);System.out.println(year + "年" + month + "月" + dayOfMonth + "日");// 使用add方法cal.add(Calendar.DAY_OF_MONTH, 5); // 加5天cal.add(Calendar.YEAR, -2); // 减2年// 获取年year = cal.get(Calendar.YEAR);// 获取月month = cal.get(Calendar.MONTH) + 1;// 获取日dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);System.out.println(year + "年" + month + "月" + dayOfMonth + "日");}}
3. getTime方法:返回对应的Date对象
Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。
import java.util.Calendar;import java.util.Date;public class Demo {public static void main(String[] args) {Calendar cal = Calendar.getInstance();Date date = cal.getTime();System.out.println(date); }}
注意事项:
- 西方星期的开始为周日(1)周一(2),中国开始为周一,因此可以-1使用。
- 在Calendar类中,月份的表示是以0-11代表1-12月(可以+1使用)。
- 日期是有大小关系的,时间靠后,时间越大。
总结
Java早期通过使用Date来计算时间,后来大部分Date类的方法都过时了,又转而希望用Calendar类代替Date类,然而Calendar类也是不尽如人意。因此专门在本文中对Java中Date类的基本概念、常见操作及相关类进行总结和归纳,方便日后的开发,希望对大家有所帮助。