在Java应用中,日期和时间作为基本的信息类型应用的特别广泛,例如获取当前时间,计算某些操作执行的时间等。日期处理相关的类包括Date和Calendar,通过Date和Calendar可以获取当前时间,对时间进行一些运算,获取时间中的年、月、日、时、分、秒和星期等信息。在输入和输出的时候经常用到字符串形式的时间,这就需要时间和字符串之间的相互转换,系统提供了DateFormat和SimpleDateFormat来完成这个转换。
java.util.Date类
用于表示日期和时间,要获取当前时间,可以使用下面的代码:
【例】
// SimpleDateTest.java
import java.util.Date;
public class SimpleDateTest {
public static void main(String[] args) {
// 定义时间对象
Date d = new Date();
// 按照默认格式输出时间
System.out.println(d.toString());
}
}
下面是输出的结果:
Mon Dec 11 05:32:13 GMT 2006
如果想按照特定的格式进行输出,可以按照下面的方法完成,但是现在的版本中建议不要使用。
【例】
// SimpleDate2Test.java
import java.util.Date;
public class SimpleDate2Test {
public static void main(String[] args) {
// 定义时间对象
Date d = new Date();
// 获取年
int year = d.getYear()+1900;
// 获取月
int month = d.getMonth()+1;
// 获取日
int date = d.getDate();
// 获取时
int hour = d.getHours();
// 获取分
int minute = d.getMinutes();
// 获取秒
int second = d.getSeconds();
// 构造输出字符串
System.out.println(year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second);
}
}
执行的结果如下:
2006-12-11 5:35:47
如果想根据年月日来确定一个Date对象,可以先创建一个对象,然后使用setter方法来完成,例如:setYear(int)、setMonth(int)等,当然这些方法也是建议不使用。如果想对时间进行比较灵活的处理可以使用DateFormat和SimpleDateFormat。
如果想按照“2006-12-11 5:35:47”的格式进行输出,可以使用下面的代码:
【例】
// FormatDateTest.java
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class FormatDateTest {
public static void main(String[] args) {
// 创建时间对象
Date d = new Date();
// 创建时间格式化对象
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 hh点mm分ss秒");
// 对时间进行格式化
String str = df.format(d);
// 输出格式化后的时间
System.out.println(str);
}
}
格式中yyyy表示年份,可以写2位,MM表示月份,可以写1位,dd表示日,可以写1位,hh表示小时,mm表示分钟(注意大小写),ss表示秒。
【注意】DateFormat和SimpleDateFormat在java.text包中,使用的时候需要引入。
要想把一个日期字符串转换成一个时间,例如把“2006-2-6”转换成日期,可以使用下面的代码:
【例】
// ParseDateTest.java
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class ParseDateTest {
public static void main(String[] args) {
//定义日期字符串
String dates = "2006-2-6";
//定义日期字符串的格式
DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
//声明日期对象
Date d2;
try {
//把日期字符串转换成日期
d2 = df2.parse(dates);
System.out.println(df2.format(d2));
}
catch (Exception ex) {
}
}
}
【注意】在转换的时候需要进行异常处理,因为在转换的时候可能会产生异常。
java.util.Calendar类
Calendar中提供了很多对时间中年、月、日、时、分、秒以及星期进行操作的方法,如果想对时间进行比较详细的操作可以使用Calendar。
该类也是抽象类,使用的时候需要使用getInstance获取实例然后再操作,并且该方法可以获取与特定时区相对应的实例,如果不指定参数,获取的就是默认的时间。下面的代码用于获取当前的时间:
Calendar c1 = Calendar.getInstance();
要想获取时间中具体的年月日时分秒或者其他信息,通过get方法完成,方法的参数用来指定获取什么信息,例如要获取年月日可以通过下面的代码完成:
year = c1.get(Calendar.YEAR);
month = c1.get(Calendar.MONTH)+1;
date = c1.get(Calendar.DATE);
要对时间中的某一项修改,使用set方法,方法的定义如下:
public void set(int field,int value)
第一个参数指定修改的项,第二个参数表示修改后的值,例如把年修改成2003年:
c1.set(Calendar.YEAR,2003);
如果要同时修改年月日,可以使用下面的方法:
public void set(int year,int month,int date)
参数分别表示时分秒,下面是同时修改年月日的例子:
c1.set(2003,5,5);
下面是同时修改年月日时分秒的例子
//修改年月日时分
c1.set(2003,5,5,10,30);
//修改年月日时分秒
c1.set(2003,5,5,10,30,20);
Date对象和Calendar对象之间可以相互转换,下面是相应的例子:
//把Calendar对象转换成Date对象
d2 = c1.getTime();
//把日期类型转换成Calendar类型
c1.setTime(d2);