日期问题不会很复杂,主要记住判别平闰年,和算今天是星期几的公式(公元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);
}
}