1、学习了 GregorianCalendar 类解决日期问题,Date类暂时不推荐使用
注意事项
- Calendar类是一个静态类,用于方便通过get访问GregorianCalendar类中的时间
- Calendar类当中,Month是从0开始的,也就是1月份是0,12月份是11
- Calendar类当中,DAY_OF_WEEK 注意,1是星期天认为是一个星期的开始,2是星期一,以此类推
测试代码
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 多种构造器
// 无参数构造器
GregorianCalendar date1 = new GregorianCalendar();
// 年月日构造器,注意月份是从0开始的
GregorianCalendar date2 = new GregorianCalendar(1999,3,10);
// 使用calendar常量构造,Calendar.JANUARY = 0
GregorianCalendar date3 = new GregorianCalendar(1999, Calendar.JANUARY,19);
// 年月日,精确到时间
GregorianCalendar date4 = new GregorianCalendar(1999,Calendar.FEBRUARY,10,23,59,59);
// 更改器与访问器
// 访问器
GregorianCalendar date = new GregorianCalendar();
int year = date.get(Calendar.YEAR);
int month = date.get(Calendar.MONTH);
int day = date.get(Calendar.DAY_OF_MONTH);
System.out.printf("Now the time is %d %d %d\n",year,month + 1,day);
// 修改器
date.set(Calendar.YEAR,1999);
date.set(Calendar.MONTH,Calendar.APRIL);
date.set(Calendar.DAY_OF_MONTH,10);
year = date.get(Calendar.YEAR);
month = date.get(Calendar.MONTH);
day = date.get(Calendar.DAY_OF_MONTH);
System.out.printf("The modified time is %d %d %d\n",year,month + 1,day);
date.set(1999,Calendar.APRIL,10);
// 日期输出
// 输出现在是这周的第几天 warning 星期天是第一天
System.out.println(date.get(Calendar.DAY_OF_WEEK) - 1);
// 输出现在是一年的第几天
System.out.println(date.get(Calendar.DAY_OF_YEAR));
// 输出现在是这个月的第几天
System.out.println(date.get(Calendar.DAY_OF_MONTH));
}
}
例题 HDU2005
给定了日期,计算当前日期是这一年的第几天,读入字符串之后,利用split函数分割字符串,然后构造一个GregorianCalendar 类,并且赋值之后,利用DAY_OF_YEAR来直接输出即可,注意set月份的时候,是从0开始的,因此需要减一。
public static void solve(){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.next();
String[] strArr = str.split("/");
GregorianCalendar date = new GregorianCalendar();
date.set(Integer.valueOf(strArr[0]),Integer.valueOf(strArr[1]) - 1,Integer.valueOf(strArr[2]));
System.out.println(date.get(Calendar.DAY_OF_YEAR));
}
}