思路分析:
对于日期格式化,我们可以使用Java提供的日期类
java.util.Date
来实现。具体来说,我们可以先将输入的年月日转换为一个Date
对象,再使用SimpleDateFormat
类将其格式化为指定的字符串。对于计算已过天数和剩余天数,我们可以使用Java提供的日历类
java.util.Calendar
来实现。具体来说,我们可以先将输入的年月日转换为一个Calendar
对象,然后分别计算已过天数和剩余天数。在计算已过天数和剩余天数时需要考虑闰年的情况,因此我们需要编写一个函数来判断是否为闰年。将上述两个部分结合起来,就可以实现本题的要求了。
代码如下:
import java.util.*;
import java.text.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入日期(格式为yyyy,MM,dd):");
String dateStr = scanner.nextLine();
String[] dateArr = dateStr.split(",");
int year = Integer.parseInt(dateArr[0]);
int month = Integer.parseInt(dateArr[1]);
int day = Integer.parseInt(dateArr[2]);
// 格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date(year - 1900, month - 1, day);
String formattedDate = sdf.format(date);
System.out.println("格式化:" + formattedDate);
// 计算已过天数和剩余天数
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, day);
int daysPassed = getDaysPassed(calendar);
int daysLeft = getDaysLeft(calendar);
System.out.println("今年已经过去" + daysPassed + "天");
System.out.println("今年还剩下" + daysLeft + "天");
}
// 判断是否为闰年
private static boolean isLeapYear(int year) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
return true;
}
return false;
}
// 计算已过天数
private static int getDaysPassed(Calendar calendar) {
int daysPassed = 0;
for (int i = 0; i < calendar.get(Calendar.MONTH); i++) {
daysPassed += getDaysInMonth(i + 1, calendar.get(Calendar.YEAR));
}
daysPassed += calendar.get(Calendar.DAY_OF_MONTH) - 1;
return daysPassed;
}
// 计算剩余天数
private static int getDaysLeft(Calendar calendar) {
int daysLeft = 0;
for (int i = calendar.get(Calendar.MONTH) + 1; i <= 12; i++) {
daysLeft += getDaysInMonth(i, calendar.get(Calendar.YEAR));
}
daysLeft -= calendar.get(Calendar.DAY_OF_MONTH) - 1;
return daysLeft;
}
// 获取指定年份月份的天数
private static int getDaysInMonth(int month, int year) {
if (month == 2) {
return isLeapYear(year) ? 29 : 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
}