日期操作类
程序开发中经常会遇到日期类型的操作,在Java中对于日期的操作也提供了良好的支持(真香,要什么有什么)
在Java中对日期的操作类常用的有以下4种:
- Date类
- Calendar类
- DateFormat类
- SimpleDateFormat类
一起来了解一下各个类如何使用的吧!!!
1. 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 的日期和时间约定。
- 年份 y 由整数 y
常用方法
方法 | 描述 |
---|---|
boolean after(Date when) | 测试此日期是否在指定日期之后。 |
boolean before(Date when) | 测试日期是否在指定日期之前。 |
int compareTo(Date anotherDate) | 比较两个日期的顺序。如果参数 Date 等于此 Date,则返回值 0;如果此 Date 在 Date 参数之前,则返回小于 0 的值;如果此 Date 在 Date 参数之后,则返回大于 0 的值。 |
public long getTime() | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
实例
import java.util.Date;
/**
* @Description: Date类
* 1.获取当前时间日期
* 2.获取1900年至现在的毫秒数
* 3.判断当前日期是否在2010年1月1日之前还是之后。
* @author: 不懂语言的猿
* @date: 2021-07-28
*/
public class dateDemo {
public static void main(String[] args) {
Date date = new Date();
Date date1 = new Date(110, 01, 01);//该方法以过时,但仍可以使用,注意:year-1900;
System.out.println("当前时间:"+date);
System.out.println("毫秒数:"+date.getTime());
if(date.compareTo(date1)==0){
System.out.println("2010年1月1日");
}else if(date.compareTo(date1)==1){
System.out.println("2010年1月1日之后");
}else {
System.out.println("2010年1月1日之前");
}
}
}
运行结果
2. Calendar类
-
Calendar提供了获取或设置各种日历字段的方法。
-
这个类本身是一个抽象类,可以依靠对象的多态性,通过子类进行父类的实例化操作。
-
由于修饰符为protected,所以也无法创建对象。但
Calendar
提供了一个类方法getInstance
,以获得此类型的一个通用的对象。Calendar
的getInstance
方法返回一个Calendar
对象,其日历字段已由当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();
常用方法
方法 | 描述 |
---|---|
static Calendar getInstance() | 使用默认时区和区域获取日历 |
public final 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() | 以毫秒为单位返回该日历的时间值。 |
Calendar类中的常量
常量 | 描述 |
---|---|
public static final int YEAR | 取得年 |
public static final int MONTH | 取得月 |
public static final int DAY_OF_MONTH | 取得日 |
public static final int HOUR_OF_DAY | 取得小时,24小时制 |
public static final int MINUTE | 取得分 |
public static final int SECOND | 取得秒 |
public static final int MILLISECOND | 取得毫秒 |
实例
import java.util.Calendar;
import java.util.GregorianCalendar;
import static java.util.Calendar.MONTH;
/**
* @Description: Calendar类
* 1.返回当前时间及毫秒值
* 2.返回月份
* 3.返回昨天这个时刻
* @author: 不懂语言的猿
* @date: 2021-07-29
*/
public class Main {
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();//用其提供的方法获得对象
//Calendar calendar=new GregorianCalendar();//用其子类得到对象
//注意这里调用了Date类中的toLocalString方法得到一个能看懂的时间
System.out.println("时间:"+calendar.getTime().toLocaleString());
System.out.println("毫秒值:"+calendar.getTimeInMillis());
System.out.println("月份:"+(calendar.get(MONTH)+1));//这里的月是从0-11,所以要加1
Calendar calendar1 = Calendar.getInstance();
calendar1.add(Calendar.DAY_OF_MONTH,-1);
System.out.println("昨天这个时刻:"+calendar1.getTime().toLocaleString());
}
}
运行结果
3.DateFormat类
在java.util.Date类中取得的时间是一个非常正确的时间,但是由于其显示的格式不理想,所以无法符合中国人的习惯,所以对其进行相应的格式化。
public abstract class DateFormatextends extends Format
DateFormat
是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为 Date
对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。
DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。
通过定义上看DateFormat类是一个抽象类,所以无法进行直接进行实例化,可以通过它提供的静态方法,来获取这个类的实例。
DateFormat df = DateFormat.getDateInstance();
常用方法
方法 | 描述 |
---|---|
public static final DateFormat getDateInstance() | 得到默认的对象 |
public static final DateFormat getDateInstance(int style,Locale aLocale) | 根据Locale得到对象 |
public static final DateFormat getDateTimeInstance() | 得到日期时间对象 |
public static final DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale aLocale) | 根据Locale得到日期时间对象 |
实例:
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
/**
* @Description: DateFormat类
* @author: 不懂语言的猿
* @date: 2021-07-29
*/
public class Main2 {
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()));
}
}
运行结果:
4.SimpleDateFormat类
如果要得到用户自己需要的日期显示格式,则必须通过DateFormat的子类SimpleDateFormat类。
常用方法
方法 | 描述 |
---|---|
public Date parse(String source)throws ParseException | 将一个包含日期的字符串变为Date类型 |
public final String format(Date date) | 将一个Date类型按照指定格式变为String类型 |
实例
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Description: SimpleDateFormat类
* 将格式为yyyy-MM-dd HH:mm:ss的时间转为yyyy年MM月dd日 HH时mm分ss秒
* @author: 不懂语言的猿
* @date: 2021-07-29
*/
public class Main3 {
public static void main(String[] args) throws ParseException {
String date = "2020-10-01 17:39:15";
String pat1 = "yyyy-MM-dd HH:mm:ss";
String pat2 = "yyyy年MM月dd日 HH时mm分ss秒";
SimpleDateFormat sdf = new SimpleDateFormat(pat1);
SimpleDateFormat sdf1 = new SimpleDateFormat(pat2);
Date da = sdf.parse(date);//将字符串data中的日期提取出来
System.out.println(sdf1.format(da));
}
}
运行结果
总结
-
目前个人遇到的对日期的操作,一般用的最多的就是对日期进行格式化,个人认为
SimpleDateFormat
类用起来更方便。 -
在上面提到的类中有很多方法(比如,Date类中许多过时的方法在开发中也是常常用到)这里只是学习了一些基础的知识,能够对日期进行简单的操作及格式化。后期如果用到的话,会进行深入的了解学习。
如有错误,欢迎指正!!!