mirror of
https://gitee.com/dromara/hutool.git
synced 2026-02-09 09:16:26 +08:00
DataBetween类的构造函数中做 defensive copy(pr#1426@Gitee)
This commit is contained in:
@@ -35,11 +35,11 @@ public class DateBetween implements Serializable {
|
||||
/**
|
||||
* 开始日期
|
||||
*/
|
||||
private final Date begin;
|
||||
private final long begin;
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
private final Date end;
|
||||
private final long end;
|
||||
|
||||
/**
|
||||
* 创建<br>
|
||||
@@ -94,11 +94,11 @@ public class DateBetween implements Serializable {
|
||||
|
||||
if (isAbs && begin.after(end)) {
|
||||
// 间隔只为正数的情况下,如果开始日期晚于结束日期,置换之
|
||||
this.begin = end;
|
||||
this.end = begin;
|
||||
this.begin = end.getTime();
|
||||
this.end = begin.getTime();
|
||||
} else {
|
||||
this.begin = begin;
|
||||
this.end = end;
|
||||
this.begin = begin.getTime();
|
||||
this.end = end.getTime();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ public class DateBetween implements Serializable {
|
||||
* @return 时长差
|
||||
*/
|
||||
public long between(final DateUnit unit) {
|
||||
final long diff = end.getTime() - begin.getTime();
|
||||
final long diff = end - begin;
|
||||
return diff / unit.getMillis();
|
||||
}
|
||||
|
||||
@@ -183,8 +183,8 @@ public class DateBetween implements Serializable {
|
||||
*
|
||||
* @return 获取开始时间
|
||||
*/
|
||||
public Date getBegin() {
|
||||
return begin;
|
||||
public Date getBeginDate() {
|
||||
return DateUtil.date(begin);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -192,8 +192,8 @@ public class DateBetween implements Serializable {
|
||||
*
|
||||
* @return 结束日期
|
||||
*/
|
||||
public Date getEnd() {
|
||||
return end;
|
||||
public Date getEndDate() {
|
||||
return DateUtil.date(end);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,12 +16,13 @@
|
||||
|
||||
package cn.hutool.v7.core.date;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Date;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class DateBetweenTest {
|
||||
|
||||
@Test
|
||||
@@ -29,18 +30,18 @@ public class DateBetweenTest {
|
||||
final Date start = DateUtil.parse("2017-02-01 12:23:46");
|
||||
final Date end = DateUtil.parse("2018-02-01 12:23:46");
|
||||
final long betweenYear = new DateBetween(start, end).betweenYear(false);
|
||||
Assertions.assertEquals(1, betweenYear);
|
||||
assertEquals(1, betweenYear);
|
||||
|
||||
final Date start1 = DateUtil.parse("2017-02-01 12:23:46");
|
||||
final Date end1 = DateUtil.parse("2018-03-01 12:23:46");
|
||||
final long betweenYear1 = new DateBetween(start1, end1).betweenYear(false);
|
||||
Assertions.assertEquals(1, betweenYear1);
|
||||
assertEquals(1, betweenYear1);
|
||||
|
||||
// 不足1年
|
||||
final Date start2 = DateUtil.parse("2017-02-01 12:23:46");
|
||||
final Date end2 = DateUtil.parse("2018-02-01 11:23:46");
|
||||
final long betweenYear2 = new DateBetween(start2, end2).betweenYear(false);
|
||||
Assertions.assertEquals(0, betweenYear2);
|
||||
assertEquals(0, betweenYear2);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -48,7 +49,7 @@ public class DateBetweenTest {
|
||||
final Date start = DateUtil.parse("2000-02-29");
|
||||
final Date end = DateUtil.parse("2018-02-28");
|
||||
final long betweenYear = new DateBetween(start, end).betweenYear(false);
|
||||
Assertions.assertEquals(18, betweenYear);
|
||||
assertEquals(18, betweenYear);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -59,7 +60,7 @@ public class DateBetweenTest {
|
||||
final Date edate = DateUtil.parse(dateStr2);
|
||||
|
||||
final long result = DateUtil.betweenYear(sdate, edate, false);
|
||||
Assertions.assertEquals(0, result);
|
||||
assertEquals(0, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -70,7 +71,7 @@ public class DateBetweenTest {
|
||||
final Date edate = DateUtil.parse(dateStr2);
|
||||
|
||||
final long result = DateUtil.betweenYear(sdate, edate, false);
|
||||
Assertions.assertEquals(1, result);
|
||||
assertEquals(1, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -82,7 +83,7 @@ public class DateBetweenTest {
|
||||
final Date edate = DateUtil.parse(dateStr2);
|
||||
|
||||
final long result = DateUtil.betweenYear(sdate, edate, false);
|
||||
Assertions.assertEquals(0, result);
|
||||
assertEquals(0, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -90,18 +91,18 @@ public class DateBetweenTest {
|
||||
final Date start = DateUtil.parse("2017-02-01 12:23:46");
|
||||
final Date end = DateUtil.parse("2018-02-01 12:23:46");
|
||||
final long betweenMonth = new DateBetween(start, end).betweenMonth(false);
|
||||
Assertions.assertEquals(12, betweenMonth);
|
||||
assertEquals(12, betweenMonth);
|
||||
|
||||
final Date start1 = DateUtil.parse("2017-02-01 12:23:46");
|
||||
final Date end1 = DateUtil.parse("2018-03-01 12:23:46");
|
||||
final long betweenMonth1 = new DateBetween(start1, end1).betweenMonth(false);
|
||||
Assertions.assertEquals(13, betweenMonth1);
|
||||
assertEquals(13, betweenMonth1);
|
||||
|
||||
// 不足
|
||||
final Date start2 = DateUtil.parse("2017-02-01 12:23:46");
|
||||
final Date end2 = DateUtil.parse("2018-02-01 11:23:46");
|
||||
final long betweenMonth2 = new DateBetween(start2, end2).betweenMonth(false);
|
||||
Assertions.assertEquals(11, betweenMonth2);
|
||||
assertEquals(11, betweenMonth2);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -109,7 +110,7 @@ public class DateBetweenTest {
|
||||
final Date date1 = DateUtil.parse("2017-03-01 20:33:23");
|
||||
final Date date2 = DateUtil.parse("2017-03-01 23:33:23");
|
||||
final String formatBetween = DateUtil.formatBetween(date1, date2, BetweenFormatter.Level.SECOND);
|
||||
Assertions.assertEquals("3小时", formatBetween);
|
||||
assertEquals("3小时", formatBetween);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -122,6 +123,19 @@ public class DateBetweenTest {
|
||||
TimeUtil.parse("2020-11-21", "yyy-MM-dd"),
|
||||
TimeUtil.parse("2020-11-23", "yyy-MM-dd"),
|
||||
ChronoUnit.WEEKS);
|
||||
Assertions.assertEquals(betweenWeek, betweenWeek2);
|
||||
assertEquals(betweenWeek, betweenWeek2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void issueIDFVKGTest() {
|
||||
Date b = new Date(1609459200000L); // 2021-01-01 00:00:00
|
||||
Date e = new Date(1609545600000L); // 2021-01-02 00:00:00
|
||||
DateBetween db = new DateBetween(b, e);
|
||||
|
||||
// 修改原始 date
|
||||
b.setTime(0L); // 1970-01-01
|
||||
|
||||
// 期望 DateBetween 不受影响,间隔仍为 1 天
|
||||
assertEquals(1, db.between(DateUnit.DAY));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user