package
com.jd.jr.fclient.test;
import
org.junit.Test;
import
java.text.ParseException;
import
java.text.SimpleDateFormat;
import
java.util.Calendar;
import
java.util.Date;
/**
* 日期測試類
*
* @author zhanghao10@jd.com
* @since 2016/3/18 0018
*/
public
class
DateTest {
/**
* 使用Calendar類 輔助完成天數的差值
* 在不涉及到跨年的情況,此種方法是沒問題的
* 但是設計跨年的情況,此種方法回出問題的哦
*
* 如果時間為:2016-03-18 11:59:59 和 2016-03-19 00:00:01的話差值為 1
*
* @throws ParseException
*/
@Test
public
void
daysOfTwo_1()
throws
ParseException {
SimpleDateFormat sdf=
new
SimpleDateFormat(
"yyyy-MM-dd"
);
//跨年的情況會出現問題哦
//如果時間為:2016-03-18 11:59:59 和 2016-03-19 00:00:01的話差值為 1
Date fDate=sdf.parse(
"2015-12-31"
);
Date oDate=sdf.parse(
"2016-01-01"
);
Calendar aCalendar = Calendar.getInstance();
aCalendar.setTime(fDate);
int
day1 = aCalendar.get(Calendar.DAY_OF_YEAR);
aCalendar.setTime(oDate);
int
day2 = aCalendar.get(Calendar.DAY_OF_YEAR);
int
days=day2-day1;
System.out.print(days);
}
/**
* 通過毫秒值,手動計算日期間的相關的值
*
* 跨年不會出現問題
* 使用此種方法的話需要注意
* 如果時間為:2016-03-18 11:59:59 和 2016-03-19 00:00:01的話差值為 0
*
* @throws ParseException
*/
@Test
public
void
daysOfTwo_2()
throws
ParseException {
SimpleDateFormat sdf=
new
SimpleDateFormat(
"yyyy-MM-dd"
);
//跨年不會出現問題
//如果時間為:2016-03-18 11:59:59 和 2016-03-19 00:00:01的話差值為 0
Date fDate=sdf.parse(
"2015-12-31"
);
Date oDate=sdf.parse(
"2016-01-01"
);
long
days=(oDate.getTime()-fDate.getTime())/(
1000
*
3600
*
24
);
System.out.print(days);
}
/**
* 計算兩個 localdatetime之間的天數差
*
* @throws ParseException
*/
public
void
getDays
throws
ParseException {
LocalDateTime now = LocalDateTime.now();
System.out.println("計算兩個時間的差:");
LocalDateTime end = LocalDateTime.now();
Duration duration = Duration.between(now,end);
long days = duration.toDays(); //相差的天數
long hours = duration.toHours();//相差的小時數
long minutes = duration.toMinutes();//相差的分鍾數
long millis = duration.toMillis();//相差毫秒數
long nanos = duration.toNanos();//相差的納秒數
System.out.println(now);
System.out.println(end);
}
}