java中Calendar类

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月计算,上述的除法均为整除

 

 

蒜头君的生日快到了,蒜头君希望是在周末,蒜头君请你帮忙算出他生日在星期几。

输入格式

输入三个正整数,分别表示年、月、日。保证输入年份合法。

输出格式

输出星期几。用MondayTuesdayWednesdayThursdayFridaySaturdaySunday表示星期几。

样例输入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;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值