方式一:
/**
* 某年某月某日是这一年的第几天
*
* @author zql
*
*/
public class Test {
public static void main(String[] args) {
Test t = new Test();
System.out.println("这一天是这一年的第" + t.getDaySub(2019, 3, 12) + "天");
}
/**
*
* @param year 年
* @param month 月
* @param date 日
* @return
*/
public int getDaySub(int year, int month, int date) {
int totalDay = 0;
for (int i = 1; i <= month; i++) {
if (i == month) {
totalDay += date;
} else {
totalDay += getThisYearMonthDays(year, i);
}
}
return totalDay;
}
/**
* 获取某年某月的天数
*
* @param year
* @param month
* @return
*/
public int getThisYearMonthDays(int year, int month) {
if (month == 2) {
return isLeapYear(year) ? 29 : 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
/**
* 判断这一年是否是闰年
*
* @param year 年份
* @return
*/
public boolean isLeapYear(int year) {
return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0) ? true : false;
}
}
方式二:
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
/**
* jdk 8
*
* @author zql
*
*/
public class Test2 {
public static void main(String[] args) {
Test2 t = new Test2();
System.out.println("这一天是这一年的第" + t.getDaySub(2019, 3, 12) + "天");
}
/**
* @param year 年
* @param month 月
* @param date 日
* @return
*/
public Integer getDaySub(int year, int month, int date) {
String m = month < 10 ? "0" + month : String.valueOf(month);
String d = date < 10 ? "0" + date : String.valueOf(date);
String endDate = year + "-" + m + "-" + d;
DateTimeFormatter DATE = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式为yyyy-MM-dd的时间字符串转为秒,默认时区为东8区
long start = LocalDateTime.parse(year + "-01-01 00:00:00", DATE).toEpochSecond(ZoneOffset.of("+8"));
long end = LocalDateTime.parse(endDate + " 00:00:00", DATE).toEpochSecond(ZoneOffset.of("+8"));
try {
int days = (int) (end - start) / (24 * 60 * 60);
return days + 1;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
方式三:
import java.text.SimpleDateFormat;
/**
* jdk 8 之前
*
* @author zql
*
*/
public class Test3 {
public static void main(String[] args) {
Test3 t = new Test3();
System.out.println("这一天是这一年的第" + t.getDaySub(2019, 3, 12) + "天");
}
/**
* @param year 年
* @param month 月
* @param date 日
* @return
*/
public Integer getDaySub(int year, int month, int date) {
SimpleDateFormat YEAR_MONTH_DAY = new SimpleDateFormat("yyyy-MM-dd");
String start = year + "-01-01";
String m = month < 10 ? "0" + month : String.valueOf(month);
String d = date < 10 ? "0" + date : String.valueOf(date);
String end = year + "-" + m + "-" + d;
try {
int days = (int) (((YEAR_MONTH_DAY.parse(end).getTime() - YEAR_MONTH_DAY.parse(start).getTime()) / (1000 * 60 * 60 * 24)));
return days + 1;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
方式四:
import java.util.Calendar;
/**
*
* @author zql
*
*/
public class Test4 {
public static void main(String[] args) {
Test4 t = new Test4();
System.out.println("这一天是这一年的第" + t.getDaySub(2019, 3, 12) + "天");
}
/**
* @param year 年
* @param month 月
* @param date 日
* @return
*/
public int getDaySub(int year, int month, int date) {
Calendar c = Calendar.getInstance();
c.set(year, 0, 0, 0, 0, 0);
long sTime = c.getTimeInMillis();
c.set(year, month - 1, date, 0, 0, 0);
long dTime = c.getTimeInMillis();
return (int)((dTime - sTime) / (1000 * 60 * 60 * 24));
}
}