涉及知识:
一、Date类
在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。
1、使用Date类代表当前系统时间
Date d = new Date();
System.out.println(d);
使用Date类的默认构造方法创建出的对象就代表当前时间,由于Date类覆盖了toString方法,所以可以直接输出Date类型的对象,显示的结果如下:
Tue Aug 08 16:20:20 CST 2017
2、使用Date类代表指定的时间(过期)
Date d1 = new Date(2017-1900,8-1,8);
System.out.println(d1);
使用带参数的构造方法,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值,显示的结果如下:
Tue Aug 08 00:00:00 CST 2017
3、获得Date对象中的信息(过期)
Date d2 = new Date();
int year = d2.getYear() +
1900; //年份
int month = d2.getMonth() +1;//月份
int day = d2.getDay();//星期几
System.out.println("年份:" + year);
System.out.println("月份:" + month);
System.out.println("星期:" + day);
二、Calendar类
从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些,下面就介绍一下Calendar类的使用。
1、使用Calendar类代表当前时间
Calendar c = Calendar.getInstance();
由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。
2、使用Calendar类代表指定的时间
Calendar c1 = Calendar.getInstance();
c1.set(2017, 8 - 1, 8);
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
set方法的声明为:
public final void set(int year,int month,int
date)
在该方法中,参数field代表要设置的字段的类型,常见类型如下:
Calendar.YEAR——年份
Calendar.MONTH——月份
Calendar.DATE——日期
Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同
Calendar.HOUR——12小时制的小时数
Calendar.HOUR_OF_DAY——24小时制的小时数
Calendar.MINUTE——分钟
Calendar.SECOND——秒
Calendar.DAY_OF_WEEK——星期几
后续的参数value代表,设置成的值。例如:
c1.set(Calendar.DATE,8);
该代码的作用是将c1对象代表的时间中日期设置为8号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。
3、获得Calendar类中的信息
Calendar c2 = Calendar.getInstance(); //年份
int year = c2.get(Calendar.YEAR); //月份
int month = c2.get(Calendar.MONTH) + 1; //星期几
int day = c2.get(Calendar.DAY_OF_WEEK);
System.out.println("年份:" + year);
System.out.println("月份:" + month);
System.out.println("星期:" + day);
使用Calendar类中的get方法可以获得Calendar对象中对应的信息,get方法的声明如下:
public int get(int field)
其中参数field代表需要获得的字段的值,字段说明和上面的set方法保持一致。需要说明的是,获得的月份为实际的月份值减1,获得的星期的值和Date类不一样。在Calendar类中,周日是1,周一是2,周二是3,依次类推。
代码演示(可视化日历程序):
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class TestDemo{
public static void main(String[] args) {
System.out.println("请按格式输入日期(如2017-8-8):");
Scanner input = new Scanner(System.in);//输入
String str = input.nextLine();
DateFormat df = new
SimpleDateFormat("yyyy-MM-dd");//字符串格式化
try {
Date date = df.parse(str);//尝试把字符串
str解释为日期和时间的表示形式
Calendar calendar = new
GregorianCalendar();//使用当前时间构造一个默认的 GregorianCalendar
calendar.setTime(date);//使用给定的 Date 设置此 Calendar
的时间。
calendar.set(Calendar.DATE, 1);//将日期设为1号
int maxDate =
calendar.getActualMaximum(calendar.DATE);//返回指定日历字段可能拥有的最大值
System.out.print("日\t一\t二\t三\t四\t五\t六");
System.out.println();
for(int i = 1 ; i <
calendar.get(Calendar.DAY_OF_WEEK); i++){//循环,次数少于当前星期中的某天
System.out.print("\t");
}
for(int i = 1; i <= maxDate; i++){
//循环,次数少于日历字段可能拥有的最大值
System.out.print(i+"\t");
int week =
calendar.get(Calendar.DAY_OF_WEEK);//指示一个星期中的某天
if(week == 7){//如果当前星期等于周六
System.out.println();
}
calendar.add(Calendar.DATE, 1);//当前日期追加1
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}