89 lines
2.5 KiB
Java
89 lines
2.5 KiB
Java
package com.nlf.calendar;
|
||
|
||
import com.nlf.calendar.util.SolarUtil;
|
||
|
||
import java.util.Calendar;
|
||
import java.util.Date;
|
||
import java.util.TimeZone;
|
||
|
||
/**
|
||
* 精确日期
|
||
*
|
||
* @author 6tail
|
||
*/
|
||
public class ExactDate {
|
||
|
||
/**
|
||
* 时区
|
||
*/
|
||
private static final TimeZone TIME_ZONE = TimeZone.getTimeZone("GMT+8");
|
||
|
||
@SuppressWarnings("MagicConstant")
|
||
public static Calendar fromYmdHms(int year, int month, int day, int hour, int minute, int second) {
|
||
Calendar c = Calendar.getInstance(TIME_ZONE);
|
||
c.set(year, month - 1, day, hour, minute, second);
|
||
c.set(Calendar.MILLISECOND, 0);
|
||
if (0 == year) {
|
||
c.add(Calendar.YEAR, 1);
|
||
}
|
||
return c;
|
||
}
|
||
|
||
public static Calendar fromYmd(int year, int month, int day) {
|
||
return fromYmdHms(year, month, day, 0, 0, 0);
|
||
}
|
||
|
||
public static Calendar fromDate(Date date) {
|
||
Calendar c = Calendar.getInstance(TIME_ZONE);
|
||
c.setTime(date);
|
||
c.set(Calendar.MILLISECOND, 0);
|
||
return c;
|
||
}
|
||
|
||
/**
|
||
* 获取两个日期之间相差的天数(如果日期a比日期b小,天数为正,如果日期a比日期b大,天数为负)
|
||
*
|
||
* @param ay 年a
|
||
* @param am 月a
|
||
* @param ad 日a
|
||
* @param by 年b
|
||
* @param bm 月b
|
||
* @param bd 日b
|
||
* @return 天数
|
||
*/
|
||
public static int getDaysBetween(int ay, int am, int ad, int by, int bm, int bd) {
|
||
int n;
|
||
int days;
|
||
int i;
|
||
if (ay == by) {
|
||
n = SolarUtil.getDaysInYear(by, bm, bd) - SolarUtil.getDaysInYear(ay, am, ad);
|
||
} else if (ay > by) {
|
||
days = SolarUtil.getDaysOfYear(by) - SolarUtil.getDaysInYear(by, bm, bd);
|
||
for (i = by + 1; i < ay; i++) {
|
||
days += SolarUtil.getDaysOfYear(i);
|
||
}
|
||
days += SolarUtil.getDaysInYear(ay, am, ad);
|
||
n = -days;
|
||
} else {
|
||
days = SolarUtil.getDaysOfYear(ay) - SolarUtil.getDaysInYear(ay, am, ad);
|
||
for (i = ay + 1; i < by; i++) {
|
||
days += SolarUtil.getDaysOfYear(i);
|
||
}
|
||
days += SolarUtil.getDaysInYear(by, bm, bd);
|
||
n = days;
|
||
}
|
||
return n;
|
||
}
|
||
|
||
/**
|
||
* 获取两个日期之间相差的天数(如果日期a比日期b小,天数为正,如果日期a比日期b大,天数为负)
|
||
*
|
||
* @param calendar0 日期a
|
||
* @param calendar1 日期b
|
||
* @return 天数
|
||
*/
|
||
public static int getDaysBetween(Calendar calendar0, Calendar calendar1) {
|
||
return getDaysBetween(calendar0.get(Calendar.YEAR), calendar0.get(Calendar.MONTH) + 1, calendar0.get(Calendar.DATE), calendar1.get(Calendar.YEAR), calendar1.get(Calendar.MONTH) + 1, calendar1.get(Calendar.DATE));
|
||
}
|
||
}
|