在Java程序的开发过程中经常会遇到日期类型的情形,主要使用包java.util中的Data、Calendar以及java.text包中的SimpleDateFormat实现
使用Data类
构造方法
public Date()
例如,通过下面的代码,可以得到当前系统的日期
import java.util.Date ;
public class DateT1{
public static void main(String args[]){
Date date = new Date() ; // 直接实例化Date对象
System.out.println("当前日期为:" + date) ;
}
};
运行结果
当前日期为:Thu Jan 16 03:03:50 CST 2020
使用Calendar类按照我们自己的格式显示时间
使用Calendar类
Calendar类可以取得当前时间,并且可以精确到毫秒。但是此类本身是一个抽象类,如果想要使用一个抽象类,则必须依靠对象的多态性,通过子类进行父类的实例化操作。Calendar的子类是GregorianCalendar。在Calendar中提供了下表的常量,分别表示日期的各个数字。
例如下面的代码可以获取系统当前日期
import java.util.* ;
public class DateT2{
public static void main(String args[]){
Calendar calendar = new GregorianCalendar(); // 实例化Calendar类对象
System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
System.out.println("MONTH: " + (calendar.get(Calendar.MONTH) + 1));
System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
}
};
运行结果如下
YEAR: 2020
MONTH: 1
DAY_OF_MONTH: 16
HOUR_OF_DAY: 3
MINUTE: 16
SECOND: 2
MILLISECOND: 913
使用DateFormat类
在类java.util.Date中获取的时间是一个非常正确的时间,但是因为其显示格式不理想,不符合习惯,因此使用DateFormat类对其进行格式化。DateFormat类和MessageFormat类都属于Format类的子类,专门用于格式化数据使用。定义DateFormat类的格式如下所示。
public abstract class DateFormat extends Format
从表面上看DateFormat类是一个抽象类,所以无法直接实例化,但是在此抽象类中提供了一个静态方法,可以直接取得本类的实例。DateFormat类的常用方法如表所示
上面4个方法都可以构造DateFormat的对象,但是发现以上方法需要传递若干个参数,这些参数表示日期地域或日期的显示形式
演示DateFormat中的默认操作
import java.text.DateFormat ;
import java.util.Date ;
public class DateT3{
public static void main(String args[]){
DateFormat df1 = null ; // 声明一个DateFormat
DateFormat df2 = null ; // 声明一个DateFormat
df1 = DateFormat.getDateInstance() ; // 得到日期的DateFormat对象
df2 = DateFormat.getDateTimeInstance() ; // 得到日期时间的DateFormat对象
System.out.println("DATE:" + df1.format(new Date())) ; // 按照日期格式化
System.out.println("DATETIME:" + df2.format(new Date())) ; // 按照日期时间格式化
}
};
执行效果如下,其中第2个DATETIME显示了时间,但还不是比较合理的中文显示格式。如果想要取得更加合理的时间,则必须在构造DateFormat对象是传递若干个参数。
DATE:2020-1-16
DATETIME:2020-1-16 3:34:52
使用SimpleDateFormat类
可以使用包java.text.中的类SimpleDateFormat完成一种日期转换为另一种日期的格式
首先必须定一个完整的日期转换模板,在模板中通过特定的日期标记可以将一个日期格式中的日期数字提取出来,日期转换模板标记如表所示
在实际的开发过程中,用户所输入的各个数据是以String方式接收的,所以此时为了可以正确的将String变为Date型数据,可以依靠SimpleDateFormat类完成
演示格式化日期操作
import java.text.* ;
import java.util.* ;
public class DateT5{
public static void main(String args[]){
String strDate = "2008-10-19 10:11:30.345" ;
// 准备第一个模板,从字符串中提取出日期数字
String pat1 = "yyyy-MM-dd HH:mm:ss.SSS" ;
// 准备第二个模板,将提取后的日期数字变为指定的格式
String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒" ;
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1) ; // 实例化模板对象
SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ; // 实例化模板对象
Date d = null ;
try{
d = sdf1.parse(strDate) ; // 将给定的字符串中的日期提取出来
}catch(Exception e){ // 如果提供的字符串格式有错误,则进行异常处理
e.printStackTrace() ; // 打印异常信息
}
System.out.println(sdf2.format(d)) ; // 将日期变为新的格式
}
};
运行结果
2008年10月19日 10时11分30秒345毫秒
在上述代码中,首先使用一个模板将字符串中表示日期的数据取出,然后再使用第2个模板将这些日期数字重新装换为新的格式表示