关于日期问题的总结

日期问题不会很复杂,主要记住判别平闰年,和算今天是星期几的公式(公元1年1月1号是星期1)

public static boolean isLeap(int year) {
    	return (year%4==0&&year%100!=0)||(year%400==0);
    }

package 日期问题;
/*用于复习昨天打的in.nextLine().split("")以及之前的排列组合思想* 还有一个闰年判断
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。
令小明头疼的是,这些日期采用的格式非常不统一,
有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。
更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。 
比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。 
给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
输入
一个日期,格式是”AA/BB/CC”。 (0 <= A, B, C <= 9) 
输出
输出若干个不相同的日期,每个日期一行,格式是”yyyy-MM-dd”。多个日期按从早到晚排列。 
样例输入
02/03/04 
样例输出
 2002-03-04 
 2004-02-03 
 2004-03-02 
*/
import java.util.*;
public class 日期排序输出 {
	static int year=0;
	static int month=0;
	static int day=0;
	static int[]  ping= {31,29,31,30,31,30,31,31,30,31,30,31};
    public static void main(String[] args) {
    	Scanner in =new Scanner(System.in);
    	String[]  temp=in.nextLine().split("/");
    	int a=Integer.parseInt(temp[0]);
    	int b=Integer.parseInt(temp[1]);
    	int c=Integer.parseInt(temp[2]);
    	int[]  temp1= {a,b,c};
    	int[]  temp2= {b,c,a};
    	int[]  temp3= {c,b,a};
    	test(temp1);
    	test(temp2);
    	test(temp3);
}
    public static void test(int[] a) {
    	  if(a[0]>=60) {year=1900+a[0];System.out.print(year);} 
    	  else {year=2000+a[0];System.out.print(year);}
		  if(a[1]>0&&a[1]<13) {month=a[1];
			  if(a[1]<10)System.out.print("-0"+month);
			  else  System.out.print("-"+month);}
		  if(isLeap(year)&&month==2&&a[2]>0&&a[2]<=29) {
			  day=a[2];System.out.println("-0"+day);
		  }
		  else {
			  if(a[2]>0&&a[2]<ping[month]) {  day=a[2];
			  if(a[2]<10)System.out.println("-0"+day);
			  else  System.out.println("-"+day);
		  }
	}
		  
    }
    public static boolean isLeap(int year) {
    	return (year%4==0&&year%100!=0)||(year%400==0);
    }
    }





package 日期问题;
/*在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
请严格按照格式书写。不能出现其它文字或符号。
*/
public class 爆炸日期 {
  public static void main(String[] args) {
	  int data=1000;
	  int[]  run= {0,31,60,91,121,152,182,213,244,274,305,335,366};
	  int[]  ping= {0,31,59,90,120,151,181,212,243,273,304,334,365};
	  int[]  run1= {0,31,29,31,30,31,30,31,31,30,31,30,31};
	  int[]  ping1= {0,31,29,31,30,31,30,31,31,30,31,30,31};
	  for(int year=2014;year<3000;year++) {
		  for(int month=0;month<12;month++) {
			  if(isLeap(year)) {
				  for(int day=1;day<=run1[month+1];day++) {
					  if((year-2015)*365+(year-1)/4-year/100+year/400+day+run[month]-313
							  -(2013/4-2014/100+2014/400)==data)
						  System.out.println(year+"-"+month+1+"-"+day);
				  }
			  }
			  else {for(int day=1;day<=ping1[month+1];day++) {
				  if((year-2015)*365+(year)/4-year/100+year/400+day+ping[month]-313
						  -(2014/4-2014/100+2014/400)==data)
					  System.out.println(year+"-"+(month+1)+"-"+day);
			  }}
		  }
	  }
  }
  public  static boolean isLeap(int year) {
	  return (year%4==0&&year%100!=0)||(year%400==0);
  }
}
 

package 日期问题;
/*题目标题: 高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113   
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
*/
public class 高斯日记 {
public static void main(String[] args) {
int data=5343;
int[]  run= {0,31,60,91,121,152,182,213,244,274,305,335,366};
int[]  ping= {0,31,59,90,120,151,181,212,243,273,304,334,365};
int[]  run1= {0,31,29,31,30,31,30,31,31,30,31,30,31};
int[]  ping1= {0,31,29,31,30,31,30,31,31,30,31,30,31};
for(int year=1779;year<1805;year++) {
	for(int month=0;month<12;month++) {
		if(isLeap(year)) {
		for(int day=1;day<run1[month+1];day++) {
				if(((year-1777)*365+(year-1)/4-year/100+year/400+run[month]+day-120-(1776/4-1777/100+1777/400))==data)
					System.out.println(year+"-"+(month+1)+"-"+day);
			}
		}
		
		else  {
			for(int day=1;day<ping1[month+1];day++) {
				if(((year-1777)*365+(year)/4-year/100+year/400+run[month]+day-120-(1777/4-1777/100+1777/400))==data)
					System.out.println(year+"-"+(month+1)+"-"+day);
			}

		}
	}
	
}

}
public static boolean isLeap(int year) {
	return (year%100!=0&&year%4==0)||(year%400==0);
}
}


package 日期问题;
/*输入星期几的第一个英文单词来判断是星期几,如果第一个字母一样则比较第二个
 * 我一开始是不屑于做的...但是想再练一下最近学的charAt(At)*/
import java.util.*; 
public class 星期一到星期天的英文单词 {
    public static void main(String[] args) {
    	Scanner in=new Scanner(System.in);
    	String num=in.nextLine();
    	switch(num.charAt(0)) {
    	case'm':
    	case'M':System.out.println("星期一");
    	case'w':
    	case'W':System.out.println("星期三");
    	case'f':
    	case'F':System.out.println("星期五");
    	case't':
    	case'T':if(num.charAt(1)=='u'||num.charAt(1)=='U')  System.out.println("星期二");
    	          else   System.out.println("星期四");
    	case's':
    	case'S':if(num.charAt(1)=='a'||num.charAt(1)=='A')  System.out.println("星期六");
        else   System.out.println("星期天");
    	
    	
    	}
    }

}

package 日期问题;
/*输入某年某月某日,判断这一天是这一年的第几天
 * 判断平闰年:
 * 如果求指定日期是星期几(公元1年1月1号是星期一)*/
import java.util.*;
public class 基础日期问题 {
    public static void main(String[] args) {
    	Scanner in=new Scanner(System.in);
    	int year=in.nextInt();
    	int month=in.nextInt();
    	int day=in.nextInt();
    	int sum = 0;
    	switch(month-1) {
    	case(0):sum=0;break;
    	case(1):sum=31;break;
    	case(2):sum=59;break;
    	case(3):sum=90;break;
    	case(4):sum=120;break;
    	case(5):sum=151;break;
    	case(6):sum=181;break;
    	case(7):sum=212;break;
    	case(8):sum=243;break;
    	case(9):sum=273;break;
    	case(10):sum=304;break;
    	case(11):sum=334;break;
    	}
    	if(year>2&&isLeap(year)) {System.out.println("这一天是这一年的第"+(sum+day+1)+"天");
    	System.out.println("这一天是星期"+((year-1)*365+(year-1)/4-year/100+year/400+sum+day+1)%7);}
    	else  {System.out.println("这一天是这一年的第"+(sum+day)+"天");
    	System.out.println("这一天是星期"+((year-1)*365+(year)/4-year/100+year/400+sum+day)%7);}
    }
    public static boolean isLeap(int year) {
    	return (year%4==0&&year%100!=0)||(year%400==0);
    }
}


package 日期问题;
/*每个月的13日又逢星期五称为黑色星期五,要求输入一个年份判断这一年有没有黑色星期五*/
import java.util.*;
public class 黑色星期五 {
    public static void main(String[] args) {
    	Scanner in=new Scanner(System.in);
    	int year=in.nextInt();
    	int[] a= {0,31,60,91,121,152,182,213,244,274,305,335,366};
    	int[] b= {0,31,59,90,120,151,181,212,243,273,304,334,365};
    	for(int month=0;month<12;month++) {
    		if(isLeap(year)) {
    		if(((year-1)*365+(year-1)/4-year/100+year/400+a[month]+13)%7==5) 
    		System.out.println("有黑色星期五"+(month+1));
    		}
    		else if(((year-1)*365+(year)/4-year/100+year/400+b[month]+13)%7==5) 
        		System.out.println("有黑色星期五"+(month+1));
    	}
    }
    public static boolean isLeap(int year) {
    	return (year%100!=0&&year%4==0)||(year%400==0);
    }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值