问题描述:输入某年某月某天,判断这一天是这一年的第几天?
输入:2023,8,7
输出:219
实现思路:
1.使用Scanner类从控制台读取一行输入,该输入应为"年,月,日"格式的字符串。
2.使用split方法按逗号分割字符串,得到一个字符串数组。然后将这个数组中的每个元素转换为整数,分别代表年、月和日。
3.计算天数:有两种计算方式。
写法1(未使用):使用Java 8中引入的LocalDate类。通过LocalDate.of(year, month, days)创建一个LocalDate对象,然后调用getDayOfYear()方法直接获取该日期是这一年的第几天。这种方法利用了Java的日期时间API,简化了计算过程。
写法2(已使用):定义了一个包含每月天数的数组arr,然后遍历这个数组,累加前几个月的天数,再加上输入日期的日数,得到结果。在累加前,首先判断是否为闰年,如果是闰年,则二月天数加1。
代码实现:
java
package com.ztt.exercise.Demo04;
import java.time.LocalDate;
import java.util.Scanner;
/*
* 输入某年某月某天,判断这一天是这一年的第几天?
* 输入:2023,8,7
* 输出:219
*/
public class Demo03 {
public static void main(String[] args) {
try(Scanner input=new Scanner(System.in)){
String line=input.nextLine();
int result=getDayOfYear(line);
System.out.println(result);
}
}
public static int getDayOfYear(String dateStr) {
//切割字符串
String[] array=dateStr.split(",");
//提取出"年月日"
int year=Integer.parseInt(array[0]);
int month=Integer.parseInt(array[1]);
int days=Integer.parseInt(array[2]);
//写法1
// LocalDate date=LocalDate.of(year, month, days);
// int ret=date.getDayOfYear();
//写法2
int[] arr= {31,28,31,30,31,30,31,31,30,31,30,31};
//判断闰年
if(year%4==0&&year%100!=0||year%400==0) {
arr[1]++;//闰年二月有29天
}
int ret=0;
for(int i=0;i<=month-2;i++) {
ret+=arr[i];
}
ret+=days;
return ret;
}
}
输出结果:
java
2023,8,7
219