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);
}
}