计算两个日期之间的相差的天数
题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入
20130101
20130105
样例输出
5
使用系统函数
代码
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int time1=sc.nextInt();
int time2=sc.nextInt();
if(time1<time2) {
int temp=time2;
time2=time1;
time1=temp;
}
int y1=time1/10000;int m1=time1%10000/100;int d1=time1%100;
int y2=time2/10000;int m2=time2%10000/100;int d2=time2%100;
Date date1=new Date(y1,m1,d1);
Date date2=new Date(y2,m2,d2);
long days=(date1.getTime()-date2.getTime())/(3600*24);
System.out.println(days);
}
}
自定义函数
- 假设输入的time1大于time2,如果time2更大,则将time1和time2的数值交换
- 循环累加y2,直至y1-y2>1,且每次累加前根据y是闰年还是平年增加366或者365
- 累加d2直至两个日期相同,同时累加累计天数的计数器ans
- 累加d2的同时,判断是否是当月的天数+1,如果是d2计为1,m++。需要注意的是在累加时,要根据年份y2来判定2月是28天还是29天。
代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int time1;
static int time2;
static int days[]= {-1,31,28,31,30,31,30,31,31,30,31,30,31};
static boolean isLeapYear(int y) {
return y%400==0||y%100!=0&&y%4==0;
}
static void read() throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
time1=Integer.parseInt(br.readLine());
time2=Integer.parseInt(br.readLine());
}
static int ans=0;
static void countDays() {
if(time1<time2) {
int temp=time2;
time2=time1;
time1=temp;
}
int y1=time1/10000;int m1=time1%10000/100;int d1=time1%100;
int y2=time2/10000;int m2=time2%10000/100;int d2=time2%100;
while(y1-y2>1) {
if(isLeapYear(y2)) {
ans+=366;
}else ans+=365;
y2++;
}
while(!(y1==y2&&d1==d2&&m1==m2)) {
d2++;
ans++;
if(isLeapYear(y2)) {
days[2]=29;
}
if(d2==days[m2]+1) {
m2++;
d2=1;
}
if(m2==13) {
y2++;
m2=1;
}
}
System.out.println(ans);
}
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
read();
countDays();
}
}
星期问题
输入格式
输入三个正整数,分别表示年、月、日。保证输入年份合法。
输出格式
输出星期几。
用 Monday 、 Tuesday 、 Wednesday 、 Thursday 、 Friday 、 Saturday 、 Sunday
表示星期几。
样例输入1
1 1 1
样例输出1
Monday
样例输入2
2016 11 29
样例输出2
Tuesday
思想
先定义变量年份y,月份m,日期d,星期用ans计数
根据样例输入可知1 年1 月1 日为礼拜一
所以先设置y=1,m=1,d=1,ans=0,先对年份进行累加,如果是闰年ans+=366%7,如果是平年ans+=365%7;最后为了避免ans超出6所以对ans%=7;
再依次对月份和天数累加,直至日期相等。
代码
import java.util.*;
class Main {
static String[] weekday = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
static int whatday(int y, int m, int d) {
// 返回正确的星期。用 0 - 6 表示 星期 1 - 7
int ans=0;
for(int i=1;i<y;i++){
if(i%4==0&&i%100!=0||i%400==0){
ans+=366%7;
ans%=7;
}else{
ans+=365%7;
ans%=7;
}
}
int []days={31,0,31,30,31,30,31,31,30,31,30,31};
days[1]=y%4==0&&y%100!=0?29:28;
for(int i=0;i<m-1;i++){
ans+=days[i]%7;
ans%=7;
}
ans+=(d-1)%7;
return ans%7;
}
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)]);
}
}