常见日期类问题汇总

  1. 黑色星期五
    在这里插入图片描述
    在这里插入图片描述
    要点:基姆拉尔森公式。
import java.util.Scanner;

//黑色星期五
public class day04prc1 {
	public static void main(String []args){
		Scanner sc = new Scanner(System.in);
		int y = sc.nextInt();
		
		for(int m=1;m<13;m++){
			int W=0;
			if(m==1 || m==2){
				W = (13+2*(m+12)+3*(m+13)/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400+1)%7;
			}
			else{
				W= (13+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
			}
			if(W==5)
				System.out.println(y+"-"+m+"-"+"13");			
        }
	}
}
  1. 高斯日记
    在这里插入图片描述
    思路:首先介绍java的Calendar类:
    首先初始化:Calendar calendar = Calendar.getInstance();
    取的化也很方便,calendar.get(Calendar.YEAR) 表示取年,同理
    calendar.get(Calendar.MONTH) 表示取月份,注意月份是从0月开始算的.
    calendar.get(Calendar.DATE)表示几号
    calendar.set(1777,1,12+500)算当前日期后500天的日子
    其就能自动变成500天后的日期,不需要管闰年大小月之类.
    要点:1.提交答案的格式是yy-mm–dd!!所以最终结果写成1799-07-16!而不是1799-7-16.
    2.月份是从0开始算的!
import java.util.Calendar;
//高斯日记
public class day04prc2 {
	public static void main(String []args){
		Calendar calender = Calendar.getInstance(); //初始化
		//计算当前日期后5343天的日子
		calender.set(1777,3,30+5343);//注意月份是从0月开始算,因此3代表的就是4月
		System.out.println(calender.get(Calendar.YEAR));
		System.out.println(calender.get(Calendar.MONTH)+1);//取月份,注意月份是从0月开始算。
		System.out.print(calender.get(Calendar.DAY_OF_MONTH)-1);
	}
}
  1. 日期问题
    在这里插入图片描述思路:转化为数字查看是否合格。用set集合存储去重。
    要点:要注意平年、闰年的2月份天数不同。
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

//日期问题
public class day04prc3 {
	public static void main(String []args){
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();
		int a = Integer.parseInt(s.substring(0, 2));
		int b = Integer.parseInt(s.substring(3, 5));
		int c = Integer.parseInt(s.substring(6, 8));
		int []arr = new int[6];
		Set<String> jihe = new HashSet<String>();
		arr[0] = (2000+a)*10000+b*100+c;
		arr[1] = (2000+c)*10000+a*100+b;
		arr[2] = (2000+c)*10000+b*100+a;
		arr[3] = (1900+a)*10000+b*100+c;
		arr[4] = (1900+c)*10000+a*100+b;
		arr[5] = (1900+c)*10000+b*100+a;
		Arrays.sort(arr);
		
		//去掉非法的
		for(int i=0;i<6;i++){
			int year = arr[i]/10000;
			int month = arr[i]%10000/100;
			int day = arr[i]%10000%100;
			if(year>=1960 && year<=2059 && month>=1 && month<=12 && check(year,month,day))
				jihe.add(String.valueOf(arr[i]));
		}
		
		for(String each:jihe){
			System.out.println(each.substring(0, 4)+"-"+each.substring(4, 6)+"-"+each.substring(6,8));
		}
}
	
	//平年、闰年的2月份不同
	private static boolean check(int year, int month, int day) {
		// TODO 自动生成的方法存根
		int []runDay = {31,29,31,30,31,30,31,31,30,31,30,31};
		int []pingDay = {31,28,31,30,31,30,31,31,30,31,30,31};
		
		if((year%4==0 && year%100!=0 ) || year%400 == 0)
		{
			if(day<=runDay[month-1] && day>=1)
				return true;
		}
		else
		{
			if(day<=pingDay[month-1] && day>=1)
				return true;
		}
		return false;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值