一、java.util.Date类
- 大部分方法已经过期,但是仍可以使用
- 使用频率较高的方法是getTime()方法,返回时间戳
- java.sql.Date类继承自util.Date类,其中大部分方法也已经过期。
二、java.text.DateFormat类
用于定制日期时间的格式,通过子类java.text.SimpleDateFormat进行具体实现
//参数是一个日期的格式
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//参数是Date类的一个对象,将其按照规定好的日期格式转换为字符串格式
String str = dateFormat.format(new Date());
//将字符串转换为日期类
Date d1 = dateFormat.parse("2010-10-10 20:20:20");
三、java.util.Calendar类
- 是一个抽象类,不能通过new来初始化Calendar类。用于设置和获取时间/日期数据的特定部分。
- 使用getInstance()方法创建对象,获取的是当前系统的时间。
- 使用setTime()方法可以设置指定时间的日历类。
//获取当前系统时间
Calendar calendar = Calendar.getInstance();
//设定为指定的Date类的时间
calendar.setTime(new Date(2020, 10, 3));
//通过get方法获取日历信息,传递的参数是int类型的常量参数,分别对应日历信息
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
...
//使用getActualMaximum()可以获取某范围内的最大值
//如:获取某月的天数
int monthDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
四、使用Calendar类制作一个万年历
- 使用了Calendar类中的方法和常量获取了日期时间的信息。
- 难点:灵活使用Calendar类的对象中的常量来计算所需的信息;万年历的格式如何对齐;
- 有待改进:对异常的处理还需要完善,目前只是对于输入非整型内容的异常处理。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.InputMismatchException;
import java.util.Scanner;
public class CalendarUser {
public static void main(String[] args) {
int year, month, day;
Scanner in = new Scanner(System.in);
try {
System.out.println("请输入年份:");
year = in.nextInt();
System.out.println("请输入月份:");
month = in.nextInt();
System.out.println("请输入日期:");
day = in.nextInt();
} catch (InputMismatchException e) {
System.out.println("请输入正确格式的年月日!");
return;
}
new CalendarUser().print(year, month, day);
}
public void print(int year, int month, int day) {
Date date = new Date(year-1900, month-1, day);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
System.out.println("-----------------------------------");
int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) % 7;
//打印当月的月历
for(int i = 0; i < (calendar.getActualMaximum(Calendar.WEEK_OF_MONTH))*7; i++) {
int realDate = i-firstDayOfWeek+1;
System.out.print(" ");
if(i <= firstDayOfWeek-1)
System.out.print(" ");
else {
if (realDate < 10)
System.out.print(" " + realDate);
else if (realDate > calendar.getActualMaximum(Calendar.DAY_OF_MONTH))
break;
else
System.out.print(" " + (i - firstDayOfWeek + 1));
}
if(realDate == day)
System.out.print("*");
else
System.out.print(" ");
if(i % 7 == 6)
System.out.println();
}
}
}