日期操作类(Date、Calendar、DateFormat、SimpleDateFormat)

时间:2021-11-05 18:08:19

Java类库之日期操作类

在程序开发中经常会遇到日期类型的操作,在Java中对于日期的操作也提供了良好的支持,主要使用java.util包中的Date, Calendar以及java.text包中的DateFormat, SimpleDateFormat。

一、代码示例1

package com.wbf.date;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateDemo01 {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
System.out.println("------------------------------");
Calendar calendar = new GregorianCalendar();//通过GregorianCalendar子类来实例化Calendar类
System.out.print("年: " + calendar.get(Calendar.YEAR));
System.out.print(", 月: " + (calendar.get(Calendar.MONTH) + 1));
System.out.print(", 日: " + calendar.get(Calendar.DAY_OF_MONTH));
System.out.print(", 时: " + calendar.get(Calendar.HOUR_OF_DAY));
System.out.print(", 分: " + calendar.get(Calendar.MINUTE));
System.out.print(", 秒: " + calendar.get(Calendar.SECOND));
System.out.print(", 毫秒: " + calendar.get(Calendar.MILLISECOND));
}
}

输出结果:

Fri Nov 15 14:28:34 CST 2013
------------------------------
年: 2013, 月: 11, 日: 15, 时: 14, 分: 28, 秒: 34, 毫秒: 425

说明:Date类可以得到系统的当前日期和时间,但是格式并不是平常看到的格式,并且时间也不是精确到毫秒。但是Calendar类却可以获取年月日时分秒毫秒,然后根据自己喜欢的格式输出日期。

二、代码示例2

package com.wbf.date;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class DateFormatDemo {
public static void main(String[] args) {
Date date = new Date();
//DateFormat是抽象类,所以肯定无法直接实例化,但是此抽象类提供了一个静态方法可以直接去的本类的实例
DateFormat df1 = null;
DateFormat df2 = null;
df1 = DateFormat.getDateInstance();//取得日期
df2 = DateFormat.getDateTimeInstance();//取得日期时间
System.out.println("DATE: " + df1.format(date));//格式化日期(仅日期)
System.out.println("DATETIME: " + df2.format(date));//格式化日期(包含时间)
System.out.println("-------------------------------------------------");
df1 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD, new Locale("zh", "CN"));//取得日期
df2 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD, DateFormat.ERA_FIELD, new Locale("zh", "CN"));//取得日期时间
System.out.println("DATE: " + df1.format(date));//格式化日期(仅日期)
System.out.println("DATETIME: " + df2.format(date));//格式化日期(包含时间)
}
}
输出结果:

DATE: 2013-11-15
DATETIME: 2013-11-15 14:52:21
-------------------------------------------------
DATE: 2013年11月15日
DATETIME: 2013年11月15日 下午02时52分21秒 CST
说明:上述的结果中可以看出,日期时间被格式化了,格式是默认的时间显示格式,如果想要得到自己需要的日期格式,就必须通过DateFormat的子类SimpleDateFormat类来完成。

三、代码示例3

在项目开发中,会经常将一个日期格式转换为另一个日期格式,例如:原日期格式为2013-11-15 15:22:39:247,转换后日期格式为2013年11月15日 15时22分39秒247毫秒,从两个日期可以发现,日期的数字是完全一样的,只是格式有所不同,要想实现转换就必须使用java.text包中的SimpleDateFormat类完成。

package com.wbf.date;

import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
public static void main(String[] args) throws Exception {
String strDate = "2013-11-15 15:22:39:247";//日期时间字符串
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");//格式一
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒");//格式二

Date date = sdf1.parse(strDate);//根据日期字符串的格式,通过对应的SimpleDateFormat(即:sdf1)的parse方法,获取Date对象
System.out.println(sdf2.format(date));//根据格式二输出日期
}
}
说明:如果使用sdf2.parse(strDate)会抛异常,必须用正确的sdf来parse对应的strDate。SimpleDateFormat类经常用于将String转换为Date型数据。在实际开发中,用户输入的各个数据都是以String的方式接收的,所以此时为了可以正确的将String转变为Date型数据,可以依靠SimpleDateFormat类完成。