領(lǐng)扣題目 一年中的第幾天
兩種解法,第一種邏輯算法寫,效率高,第二種使用jdk的API,效率低,推薦第一種,親測可用:
1.邏輯算法寫
public class Demo11 {
public static void main(String[] args) {
String date1 = "2019-01-09";
String date2 = "2019-02-10";
String date3 = "2003-03-01";
String date4 = "2004-03-01";
String date5 = "1900-03-25";
System.out.println(dayOfYear(date1));
System.out.println(dayOfYear(date2));
System.out.println(dayOfYear(date3));
System.out.println(dayOfYear(date4));
System.out.println(dayOfYear(date5));
}
/*平年二月28天*/
private static final int DAYS_28 = 28;
/*閏年二月29天*/
private static final int DAYS_29 = 29;
/*除了31天的月份其他均為30天*/
private static final int DAYS_30 = 30;
/*1、3、5、7、8、10、12月份31天*/
private static final int DAYS_31 = 31;
public static int dayOfYear(String date) {
String[] split = date.split("-");
int totalDays = 0;
int year = Integer.valueOf(split[0]);
int month = Integer.valueOf(split[1]);
int day = Integer.valueOf(split[2]);
switch (month) {
// 12 月份加的是11月份的天數(shù),依次類推
case 12:
totalDays += DAYS_30;
case 11:
totalDays += DAYS_31;
case 10:
totalDays += DAYS_30;
case 9:
totalDays += DAYS_31;
case 8:
totalDays += DAYS_31;
case 7:
totalDays += DAYS_30;
case 6:
totalDays += DAYS_31;
case 5:
totalDays += DAYS_30;
case 4:
totalDays += DAYS_31;
case 3:
// 判斷是否是閏年
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
totalDays += DAYS_29;
} else {
totalDays += DAYS_28;
}
case 2:
totalDays += DAYS_31;
case 1: // 如果是1月份就加上輸入的天數(shù)
totalDays += day;
}
return totalDays;
}
}
2.使用JDK的API
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Demo11 {
public static void main(String[] args) {
String date1 = "2019-01-09";
String date2 = "2019-02-10";
String date3 = "2003-03-01";
String date4 = "2004-03-01";
String date5 = "1900-03-25";
System.out.println(dayOfYear1(date1));
System.out.println(dayOfYear1(date2));
System.out.println(dayOfYear1(date3));
System.out.println(dayOfYear1(date4));
System.out.println(dayOfYear1(date5));
}
public static int dayOfYear1(String date) {
try {
Calendar ca = Calendar.getInstance();
ca.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(date));
return ca.get(Calendar.DAY_OF_YEAR);
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
}
3.兩種方式的效率
領(lǐng)扣效率比較

領(lǐng)扣效率比較
比較起來我推薦第一種,當(dāng)然也有借鑒網(wǎng)上大佬的代碼,在此感謝。