Calendar类被abstract所修饰,说明不能通过new的方式来获得实例,对此,calendar提供了一个类方法getInstance,以此获得此类型的一个通用的对象。
package CalendarDemo;
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
//Calendar calendar=Calendar.getInstance();
//
//
// /*----------获取当前年月日时分秒星期----------*/
////Calendar常用的方法
////获取年
//int year=calendar.get(Calendar.YEAR);
////获取月(月份的范围是0-11,因此获取月份的时候需要+1才是当前的月份值)
//int month=calendar.get(Calendar.MONTH)+1;
////获取日
//int day=calendar.get(Calendar.DAY_OF_MONTH);
////获取时
//int hour=calendar.get(Calendar.HOUR);//8时
////获取时 24小时表示
//int hour1=calendar.get(Calendar.HOUR_OF_DAY);//20时
////获取分
//int minute=calendar.get(Calendar.MINUTE);
////获取秒
//int second=calendar.get(Calendar.SECOND);
////获取星期 英语国家星期从星期日开始计算
//int weekday=calendar.get(Calendar.DAY_OF_WEEK)-1;
//System.out.println("现在是 "+year+"年"+month+"月"+day+"日"+hour1+"时"
//+minute+"分"+second+"秒"+"星期"+weekday);
///*----------获取一年后的今天----------*/
////年 加1
//calendar.add(Calendar.YEAR,1);
////获取年
//int lyear=calendar.get(Calendar.YEAR);
////获取月
//int lmonth=calendar.get(Calendar.MONTH)+1;
////获取日
//int lday=calendar.get(Calendar.DAY_OF_MONTH);
//System.out.println("一年后的今天"+lyear+"年"+lmonth+"月"+lday+"日");
//
//
//
//
///*----------设置日期----------*/
//calendar.set(Calendar.YEAR,2000);
//System.out.println("现在是"+calendar.get(Calendar.YEAR)+"年");
//calendar.set(2018,8,8);
////获取年
//int llyear=calendar.get(Calendar.YEAR);
////获取月
//int llmonth=calendar.get(Calendar.MONTH)+1;
////获取日
//int llday=calendar.get(Calendar.DAY_OF_MONTH);
//System.out.println("现在是 "+llyear+"年"+llmonth+"月"+llday+"日");
//
//
//
//
//
////设置每个月的最大天数
//calendar.set(Calendar.DAY_OF_MONTH,calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
////设置每天的最大小时
//calendar.set(Calendar.HOUR_OF_DAY,calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
////设置每小时最大分钟
//calendar.set(Calendar.MINUTE,calendar.getActualMaximum(Calendar.MINUTE));
////设置每分钟最大秒
//calendar.set(Calendar.SECOND,calendar.getActualMaximum(Calendar.SECOND));
////获取日
//int dayy=calendar.get(Calendar.DAY_OF_MONTH);
////获取时 24小时表示
//int hourr=calendar.get(Calendar.HOUR_OF_DAY);//20时
////获取分
//int minutee=calendar.get(Calendar.MINUTE);
////获取秒
//int secondd=calendar.get(Calendar.SECOND);
//
//System.out.println(dayy+"日"+hourr+"时"+minutee+"分"+secondd+"秒");
// set(int field,int value) 和 add(int field,int value) 区别
Calendar calendar=Calendar.getInstance();
//表示在默认的当前日期上加上两天
calendar.add(Calendar.DAY_OF_MONTH,2);
int days=calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);//当前日期24号 输出26
//表示将日期设置为本月2号
calendar.set(Calendar.DAY_OF_MONTH,2);
int dayss=calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(dayss);//输入 2
}
}
蔡基姆拉尔森计算公式
假设星期为w 年份为y 月份为 m 日期为d
W=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7
然后把计算出来的w加上1就是真正的星期几了
注意 每年的1,2 月要当成上一年的13,14月计算,上述的除法均为整除
蒜头君的生日快到了,蒜头君希望是在周末,蒜头君请你帮忙算出他生日在星期几。
输入格式
输入三个正整数,分别表示年、月、日。保证输入年份合法。
输出格式
输出星期几。用Monday、Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday表示星期几。
样例输入1
1 1 1
样例输出1
Monday
样例输入2
2016 11 29
样例输出2
Tuesday
import java.util.*;
//题目1
class Main1 {
static String[] weekday = { "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday" };
static int whatday(int y, int m, int d) {
Calendar calendar = Calendar.getInstance();
calendar.set(y, m - 1, d);
int week = calendar.get(Calendar.DAY_OF_WEEK);
if (week == 1)
return 6;
else {
return week - 2;
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int y = cin.nextInt();
int m = cin.nextInt();
int d = cin.nextInt();
System.out.println(weekday[whatday(y, m, d)]);
}
}
蒜头君和花椰妹谈恋爱啦。祝福他们吧。蒜头君想知道第他们的第 100100 天,200200 天 ... 纪念日。
输入格式
输入 44 个整数 y,m,d,ky,m,d,k,表示他们在一起的日期,保证是一个 1900 年 1 月 1 日以后的日期,蒜头君想知道他们的 k(0 \leq k \leq 10000)k(0≤k≤10000)天纪念日。
输出格式
输出格式按照yyyy-mm-dd的格式输出 kk 天纪念日的日期。月份和天数必须各输出 22 位。保证最后答案年份不超过 44 位。
样例输入1
2016 10 1 100
样例输出1
2017-01-09
样例输入2
2017 1 1 10
样例输出2
2017-01-11
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
//题目2
public class Main2 {
public static String count(int year,int month,int day,int k)
{
Calendar calendar=Calendar.getInstance();
calendar.set(year,month-1,day);
calendar.add(Calendar.DAY_OF_MONTH,k);
DateFormat bf=new SimpleDateFormat("yyyy-MM-dd");
Date date=new Date();
date=calendar.getTime();
String format=bf.format(date);
return format;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int year=sc.nextInt();
int month=sc.nextInt();
int day=sc.nextInt();
int k=sc.nextInt();
System.out.println(count(year,month,day,k));
}
}
日历有 阳历(公历) 和 阴历(农历) 之分。每年都有法定节假日,这些分成三类——双休、阳历节假日、阴历节假日。
1.
双休
2.
1)周六和周日 22 天
3.
4.
阳历节假日
5.
1)元旦:阳历每年 1 月 1 日,放假 11 天
6.
2)劳动节:阳历每年 5 月 1 日,放假 11 天
7.
3)国庆节:阳历每年 10 月 1 日,放假 33天
8.
4)圣诞节:阳历每年 12 月 25 日,放假 11天
9.
10.
阴历节假日
11.
1)春节:阴历每年 1 月 1 日,放假 33 天
12.
2)清明节:阳历每年 4 月 4 - 6 日之间的某天,放假 11 天
13.
3)端午节:阴历每年 5 月 5 日,放假 11 天
14.
4)中秋节:阴历每年 8 月 15 日, 放假 11天
15.
当节假日和双休重合时,双休 不延后 也 不提前,保证节假日之间不会重合。现在给你某年的所有阴历节假日的 阳历 日期,以及当年的 1 月 1 日是星期几,请你计算出这一年(阳历 1 月 1 日到 12 月 31 日)放了多少天假(包括双休、阳历节假日和阴历节假日)。
输入格式
第一行输入年份 y(1900 < y \leq 2050)y(1900<y≤2050)。
接下来 44 行,每行输入两个整数 m,dm,d, 依次表示春节、清明节、端午节和中秋节的阳历日期。
最后一行一个整数表示当年 1 月 1 号是星期几(一周内的第几天,每周从星期一开始计数,即星期一为第一天)。
输出格式
输出一个整数,表示当年放假的天数。
样例输入
2017
1 28
4 4
5 30
10 4
7
样例输出
113
import java.util.Scanner;
public class Main {
static int[] months=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int year=scan.nextInt();
int allday=365;
if(isRunNian(year)){
months[2]=29;
allday=366;
}
int month1=scan.nextInt();
int day1=scan.nextInt();
int month2=scan.nextInt();
int day2=scan.nextInt();
int month3=scan.nextInt();
int day3=scan.nextInt();
int month4=scan.nextInt();
int day4=scan.nextInt();
int week=scan.nextInt();
//int week=week1;
int d1=qiuDay(year,month1,day1);
int d2=qiuDay(year,month2,day2);
int d3=qiuDay(year,month3,day3);
int d4=qiuDay(year,month4,day4);
int yuandan=qiuDay(year,1,1);
int laodong=qiuDay(year,5,1);
int guoqing=qiuDay(year,10,1);
int shengdan=qiuDay(year,12,25);
int sum=0;//记录放假总天数
for(int i=1;i<=allday;){
if(d1==i||guoqing==i){
sum+=3;
week=(week+3)%7;
i=i+3;
}
else if(d2==i||d3==i||d4==i||yuandan==i
||laodong==i||shengdan==i){
i++;
sum+=1;
week=(week+1)%7;
}
else if(week%7==0||week%7==6){
//System.out.println(i);
i++;
week=(week+1)%7;
sum+=1;
}
else{
week=(week+1)%7;
i++;
}
}
System.out.println(sum);
}
public static boolean isRunNian(int year){//判断是否为闰年
if(year%400==0||(year%4==0&&year%100!=0)){
return true;
}
return false;
}
public static int qiuDay(int year,int month,int day){//求几月几日是一年中的第几天
int sum=0;
for(int i=1;i<month;i++){
sum+=months[i];
}
return sum+day;
}
}