java例题_14 该日期一年中的第几天问题
阅读原文时间:2023年07月08日阅读:2

1 /*14 【程序 14 求日期】
2 题目:输入某年某月某日,判断这一天是这一年的第几天?
3 程序分析:以 3 月 5 日为例,应该先把前两个月的加起来,然后再加上 5 天即本年的第几天,特殊情况,闰年且输入月份大于 3 时需考虑多加一天。
4 */
5
6 /*分析:
7 * 1、得到键盘上的数字,并以“.”间隔,分别将年月日存入year,month,day中
8 * 2、判断月份是几月,如果一月就直接访问日,如果2月就day+31,如果大于等于三月且小于等于8月,则31*month/2+30*(month-month/2)-3+day,
9 * 如果大于8月,则31*(month+1)/2+30*(month-(month+1)/2)-3+day
10 * 3、判断是否为闰年,如果是,再加1----闰年:四年一闰,百年不闰,四百年再闰
11 * */
12
13
14 package homework;
15
16 import java.util.Scanner;
17
18 public class _14 {
19
20 public static void main(String[] args) {
21 // 声明t,表示在哪儿一天
22 int t=0;
23 //从键盘得到年月日
24 Scanner sc=new Scanner(System.in);
25 System.out.println("请输入年月日,并以空格相间(如:2020 01 01):");
26 int year=sc.nextInt();
27 int month=sc.nextInt();
28 int day=sc.nextInt();
29 // System.out.println(year+"年"+month+"月"+day+"日"); //测试
30
31 if (month==1) {
32 t=day;
33 }
34 else if (month==2) {
35 t=day+31;
36 }
37 else if ((month>=3)&(month<=8)) {
38 t=31*month/2+30*(month-month/2-1)-2+day;
39 // System.out.println("大月:"+(month+1)/2+" 小月:"+(month-(month+1)/2-1)+" 天数:"+day);
40 // System.out.println("大月天数:"+31*(month)/2+" 小月天数:"+(30*(month-(month+1)/2-1)-2));
41 }
42 else if (month<=12) {
43 t=31*(month)/2+30*(month-(month+1)/2-1)-2+day;
44 // System.out.println("大月:"+(month)/2+" 小月:"+(month-(month+1)/2-1)+" 天数:"+day);
45 // System.out.println("大月天数:"+31*(month)/2+" 小月天数:"+(30*(month-(month+1)/2-1)-2));
46 }
47 else {
48 //保证月份正确-----暂时还不会异常捕获
49 }
50 // System.out.println(year+"年"+month+"月"+day+"日是这一年中的第"+t+"天");
51 //判断是否为闰年
52 if(((year%4==0)&(year%100!=0))||(year%400==0)){
53 t=t+1;
54 }
55 //还有判定月份,日期等是否合法,目前只能用if实现,不会异常捕获,暂时不写了
56 System.out.println(year+"年"+month+"月"+day+"日是这一年中的第"+t+"天");
57
58 }
59
60 }