diff --git a/hutool-core/src/main/java/cn/hutool/core/date/BetweenFormater.java b/hutool-core/src/main/java/cn/hutool/core/date/BetweenFormater.java
index bd83e1adf..94d8ea82a 100644
--- a/hutool-core/src/main/java/cn/hutool/core/date/BetweenFormater.java
+++ b/hutool-core/src/main/java/cn/hutool/core/date/BetweenFormater.java
@@ -1,208 +1,20 @@
package cn.hutool.core.date;
-import cn.hutool.core.util.StrUtil;
-
-import java.io.Serializable;
-
/**
- * 时长格式化器
+ * 时长格式化器
+ *
*
* @author Looly
+ * @deprecated 拼写错误,请使用{@link BetweenFormatter}
*/
-public class BetweenFormater implements Serializable {
- private static final long serialVersionUID = 1L;
+@Deprecated
+public class BetweenFormater extends BetweenFormatter {
- /**
- * 时长毫秒数
- */
- private long betweenMs;
- /**
- * 格式化级别
- */
- private Level level;
- /**
- * 格式化级别的最大个数
- */
- private final int levelMaxCount;
-
- /**
- * 构造
- *
- * @param betweenMs 日期间隔
- * @param level 级别,按照天、小时、分、秒、毫秒分为5个等级,根据传入等级,格式化到相应级别
- */
public BetweenFormater(long betweenMs, Level level) {
- this(betweenMs, level, 0);
+ super(betweenMs, level);
}
- /**
- * 构造
- *
- * @param betweenMs 日期间隔
- * @param level 级别,按照天、小时、分、秒、毫秒分为5个等级,根据传入等级,格式化到相应级别
- * @param levelMaxCount 格式化级别的最大个数,假如级别个数为1,但是级别到秒,那只显示一个级别
- */
public BetweenFormater(long betweenMs, Level level, int levelMaxCount) {
- this.betweenMs = betweenMs;
- this.level = level;
- this.levelMaxCount = levelMaxCount;
- }
-
- /**
- * 格式化日期间隔输出
- *
- * @return 格式化后的字符串
- */
- public String format() {
- final StringBuilder sb = new StringBuilder();
- if (betweenMs > 0) {
- long day = betweenMs / DateUnit.DAY.getMillis();
- long hour = betweenMs / DateUnit.HOUR.getMillis() - day * 24;
- long minute = betweenMs / DateUnit.MINUTE.getMillis() - day * 24 * 60 - hour * 60;
-
- final long BetweenOfSecond = ((day * 24 + hour) * 60 + minute) * 60;
- long second = betweenMs / DateUnit.SECOND.getMillis() - BetweenOfSecond;
- long millisecond = betweenMs - (BetweenOfSecond + second) * 1000;
-
- final int level = this.level.ordinal();
- int levelCount = 0;
-
- if (isLevelCountValid(levelCount) && 0 != day && level >= Level.DAY.ordinal()) {
- sb.append(day).append(Level.DAY.name);
- levelCount++;
- }
- if (isLevelCountValid(levelCount) && 0 != hour && level >= Level.HOUR.ordinal()) {
- sb.append(hour).append(Level.HOUR.name);
- levelCount++;
- }
- if (isLevelCountValid(levelCount) && 0 != minute && level >= Level.MINUTE.ordinal()) {
- sb.append(minute).append(Level.MINUTE.name);
- levelCount++;
- }
- if (isLevelCountValid(levelCount) && 0 != second && level >= Level.SECOND.ordinal()) {
- sb.append(second).append(Level.SECOND.name);
- levelCount++;
- }
- if (isLevelCountValid(levelCount) && 0 != millisecond && level >= Level.MILLISECOND.ordinal()) {
- sb.append(millisecond).append(Level.MILLISECOND.name);
- // levelCount++;
- }
- }
-
- if (StrUtil.isEmpty(sb)) {
- sb.append(0).append(this.level.name);
- }
-
- return sb.toString();
- }
-
- /**
- * 获得 时长毫秒数
- *
- * @return 时长毫秒数
- */
- public long getBetweenMs() {
- return betweenMs;
- }
-
- /**
- * 设置 时长毫秒数
- *
- * @param betweenMs 时长毫秒数
- */
- public void setBetweenMs(long betweenMs) {
- this.betweenMs = betweenMs;
- }
-
- /**
- * 获得 格式化级别
- *
- * @return 格式化级别
- */
- public Level getLevel() {
- return level;
- }
-
- /**
- * 设置格式化级别
- *
- * @param level 格式化级别
- */
- public void setLevel(Level level) {
- this.level = level;
- }
-
- /**
- * 格式化等级枚举
- *
- * @author Looly
- */
- public enum Level {
-
- /**
- * 天
- */
- DAY("天"),
- /**
- * 小时
- */
- HOUR("小时"),
- /**
- * 分钟
- */
- MINUTE("分"),
- /**
- * 秒
- */
- SECOND("秒"),
- /**
- * 毫秒
- * @deprecated 拼写错误,请使用{@link #MILLISECOND}
- */
- @Deprecated
- MILLSECOND("毫秒"),
- /**
- * 毫秒
- */
- MILLISECOND("毫秒");
-
- /**
- * 级别名称
- */
- private final String name;
-
- /**
- * 构造
- *
- * @param name 级别名称
- */
- Level(String name) {
- this.name = name;
- }
-
- /**
- * 获取级别名称
- *
- * @return 级别名称
- */
- public String getName() {
- return this.name;
- }
- }
-
- @Override
- public String toString() {
- return format();
- }
-
- /**
- * 等级数量是否有效
- * 有效的定义是:levelMaxCount大于0(被设置),当前等级数量没有超过这个最大值
- *
- * @param levelCount 登记数量
- * @return 是否有效
- */
- private boolean isLevelCountValid(int levelCount) {
- return this.levelMaxCount <= 0 || levelCount < this.levelMaxCount;
+ super(betweenMs, level, levelMaxCount);
}
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/date/BetweenFormatter.java b/hutool-core/src/main/java/cn/hutool/core/date/BetweenFormatter.java
new file mode 100644
index 000000000..27ca3f423
--- /dev/null
+++ b/hutool-core/src/main/java/cn/hutool/core/date/BetweenFormatter.java
@@ -0,0 +1,215 @@
+package cn.hutool.core.date;
+
+import cn.hutool.core.util.StrUtil;
+
+import java.io.Serializable;
+
+/**
+ * 时长格式化器,用于格式化输出两个日期相差的时长
+ * 根据{@link Level}不同,调用{@link #format()}方法后返回类似于:
+ *
+ * - XX小时XX分XX秒
+ * - XX天XX小时
+ * - XX月XX天XX小时
+ *
+ *
+ * @author Looly
+ */
+public class BetweenFormatter implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 时长毫秒数
+ */
+ private long betweenMs;
+ /**
+ * 格式化级别
+ */
+ private Level level;
+ /**
+ * 格式化级别的最大个数
+ */
+ private final int levelMaxCount;
+
+ /**
+ * 构造
+ *
+ * @param betweenMs 日期间隔
+ * @param level 级别,按照天、小时、分、秒、毫秒分为5个等级,根据传入等级,格式化到相应级别
+ */
+ public BetweenFormatter(long betweenMs, Level level) {
+ this(betweenMs, level, 0);
+ }
+
+ /**
+ * 构造
+ *
+ * @param betweenMs 日期间隔
+ * @param level 级别,按照天、小时、分、秒、毫秒分为5个等级,根据传入等级,格式化到相应级别
+ * @param levelMaxCount 格式化级别的最大个数,假如级别个数为1,但是级别到秒,那只显示一个级别
+ */
+ public BetweenFormatter(long betweenMs, Level level, int levelMaxCount) {
+ this.betweenMs = betweenMs;
+ this.level = level;
+ this.levelMaxCount = levelMaxCount;
+ }
+
+ /**
+ * 格式化日期间隔输出
+ *
+ * @return 格式化后的字符串
+ */
+ public String format() {
+ final StringBuilder sb = new StringBuilder();
+ if (betweenMs > 0) {
+ long day = betweenMs / DateUnit.DAY.getMillis();
+ long hour = betweenMs / DateUnit.HOUR.getMillis() - day * 24;
+ long minute = betweenMs / DateUnit.MINUTE.getMillis() - day * 24 * 60 - hour * 60;
+
+ final long BetweenOfSecond = ((day * 24 + hour) * 60 + minute) * 60;
+ long second = betweenMs / DateUnit.SECOND.getMillis() - BetweenOfSecond;
+ long millisecond = betweenMs - (BetweenOfSecond + second) * 1000;
+
+ final int level = this.level.ordinal();
+ int levelCount = 0;
+
+ if (isLevelCountValid(levelCount) && 0 != day && level >= Level.DAY.ordinal()) {
+ sb.append(day).append(Level.DAY.name);
+ levelCount++;
+ }
+ if (isLevelCountValid(levelCount) && 0 != hour && level >= Level.HOUR.ordinal()) {
+ sb.append(hour).append(Level.HOUR.name);
+ levelCount++;
+ }
+ if (isLevelCountValid(levelCount) && 0 != minute && level >= Level.MINUTE.ordinal()) {
+ sb.append(minute).append(Level.MINUTE.name);
+ levelCount++;
+ }
+ if (isLevelCountValid(levelCount) && 0 != second && level >= Level.SECOND.ordinal()) {
+ sb.append(second).append(Level.SECOND.name);
+ levelCount++;
+ }
+ if (isLevelCountValid(levelCount) && 0 != millisecond && level >= Level.MILLISECOND.ordinal()) {
+ sb.append(millisecond).append(Level.MILLISECOND.name);
+ // levelCount++;
+ }
+ }
+
+ if (StrUtil.isEmpty(sb)) {
+ sb.append(0).append(this.level.name);
+ }
+
+ return sb.toString();
+ }
+
+ /**
+ * 获得 时长毫秒数
+ *
+ * @return 时长毫秒数
+ */
+ public long getBetweenMs() {
+ return betweenMs;
+ }
+
+ /**
+ * 设置 时长毫秒数
+ *
+ * @param betweenMs 时长毫秒数
+ */
+ public void setBetweenMs(long betweenMs) {
+ this.betweenMs = betweenMs;
+ }
+
+ /**
+ * 获得 格式化级别
+ *
+ * @return 格式化级别
+ */
+ public Level getLevel() {
+ return level;
+ }
+
+ /**
+ * 设置格式化级别
+ *
+ * @param level 格式化级别
+ */
+ public void setLevel(Level level) {
+ this.level = level;
+ }
+
+ /**
+ * 格式化等级枚举
+ *
+ * @author Looly
+ */
+ public enum Level {
+
+ /**
+ * 天
+ */
+ DAY("天"),
+ /**
+ * 小时
+ */
+ HOUR("小时"),
+ /**
+ * 分钟
+ */
+ MINUTE("分"),
+ /**
+ * 秒
+ */
+ SECOND("秒"),
+ /**
+ * 毫秒
+ *
+ * @deprecated 拼写错误,请使用{@link #MILLISECOND}
+ */
+ @Deprecated
+ MILLSECOND("毫秒"),
+ /**
+ * 毫秒
+ */
+ MILLISECOND("毫秒");
+
+ /**
+ * 级别名称
+ */
+ private final String name;
+
+ /**
+ * 构造
+ *
+ * @param name 级别名称
+ */
+ Level(String name) {
+ this.name = name;
+ }
+
+ /**
+ * 获取级别名称
+ *
+ * @return 级别名称
+ */
+ public String getName() {
+ return this.name;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return format();
+ }
+
+ /**
+ * 等级数量是否有效
+ * 有效的定义是:levelMaxCount大于0(被设置),当前等级数量没有超过这个最大值
+ *
+ * @param levelCount 登记数量
+ * @return 是否有效
+ */
+ private boolean isLevelCountValid(int levelCount) {
+ return this.levelMaxCount <= 0 || levelCount < this.levelMaxCount;
+ }
+}
diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateBetween.java b/hutool-core/src/main/java/cn/hutool/core/date/DateBetween.java
index 7a28fb572..f37b869be 100644
--- a/hutool-core/src/main/java/cn/hutool/core/date/DateBetween.java
+++ b/hutool-core/src/main/java/cn/hutool/core/date/DateBetween.java
@@ -159,12 +159,12 @@ public class DateBetween implements Serializable{
* @param level 级别
* @return 字符串
*/
- public String toString(BetweenFormater.Level level) {
+ public String toString(BetweenFormatter.Level level) {
return DateUtil.formatBetween(between(DateUnit.MS), level);
}
@Override
public String toString() {
- return toString(BetweenFormater.Level.MILLISECOND);
+ return toString(BetweenFormatter.Level.MILLISECOND);
}
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java b/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java
index 69d722f87..be693e020 100644
--- a/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java
+++ b/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java
@@ -695,7 +695,7 @@ public class DateTime extends Date {
* @param formatLevel 格式化级别
* @return 相差时长
*/
- public String between(Date date, DateUnit unit, BetweenFormater.Level formatLevel) {
+ public String between(Date date, DateUnit unit, BetweenFormatter.Level formatLevel) {
return new DateBetween(this, date).toString(formatLevel);
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java
index e5bcc8827..5815c3632 100644
--- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java
@@ -1409,7 +1409,7 @@ public class DateUtil extends CalendarUtil {
* @param level 级别,按照天、小时、分、秒、毫秒分为5个等级
* @return XX天XX小时XX分XX秒
*/
- public static String formatBetween(Date beginDate, Date endDate, BetweenFormater.Level level) {
+ public static String formatBetween(Date beginDate, Date endDate, BetweenFormatter.Level level) {
return formatBetween(between(beginDate, endDate, DateUnit.MS), level);
}
@@ -1432,8 +1432,8 @@ public class DateUtil extends CalendarUtil {
* @param level 级别,按照天、小时、分、秒、毫秒分为5个等级
* @return XX天XX小时XX分XX秒XX毫秒
*/
- public static String formatBetween(long betweenMs, BetweenFormater.Level level) {
- return new BetweenFormater(betweenMs, level).format();
+ public static String formatBetween(long betweenMs, BetweenFormatter.Level level) {
+ return new BetweenFormatter(betweenMs, level).format();
}
/**
@@ -1444,7 +1444,7 @@ public class DateUtil extends CalendarUtil {
* @since 3.0.1
*/
public static String formatBetween(long betweenMs) {
- return new BetweenFormater(betweenMs, BetweenFormater.Level.MILLISECOND).format();
+ return new BetweenFormatter(betweenMs, BetweenFormatter.Level.MILLISECOND).format();
}
/**
diff --git a/hutool-core/src/test/java/cn/hutool/core/date/BetweenFormaterTest.java b/hutool-core/src/test/java/cn/hutool/core/date/BetweenFormaterTest.java
index 5374d596f..c188ffdf4 100644
--- a/hutool-core/src/test/java/cn/hutool/core/date/BetweenFormaterTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/date/BetweenFormaterTest.java
@@ -1,6 +1,6 @@
package cn.hutool.core.date;
-import cn.hutool.core.date.BetweenFormater.Level;
+import cn.hutool.core.date.BetweenFormatter.Level;
import org.junit.Assert;
import org.junit.Test;
@@ -9,20 +9,20 @@ public class BetweenFormaterTest {
@Test
public void formatTest(){
long betweenMs = DateUtil.betweenMs(DateUtil.parse("2017-01-01 22:59:59"), DateUtil.parse("2017-01-02 23:59:58"));
- BetweenFormater formater = new BetweenFormater(betweenMs, Level.MILLISECOND, 1);
+ BetweenFormatter formater = new BetweenFormatter(betweenMs, Level.MILLISECOND, 1);
Assert.assertEquals(formater.toString(), "1天");
}
@Test
public void formatBetweenTest(){
long betweenMs = DateUtil.betweenMs(DateUtil.parse("2018-07-16 11:23:19"), DateUtil.parse("2018-07-16 11:23:20"));
- BetweenFormater formater = new BetweenFormater(betweenMs, Level.SECOND, 1);
+ BetweenFormatter formater = new BetweenFormatter(betweenMs, Level.SECOND, 1);
Assert.assertEquals(formater.toString(), "1秒");
}
@Test
public void formatTest2(){
- BetweenFormater formater = new BetweenFormater(584, Level.SECOND, 1);
+ BetweenFormatter formater = new BetweenFormatter(584, Level.SECOND, 1);
Assert.assertEquals(formater.toString(), "0秒");
}
}
diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateBetweenTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateBetweenTest.java
index 23e1284be..788e0ad96 100644
--- a/hutool-core/src/test/java/cn/hutool/core/date/DateBetweenTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/date/DateBetweenTest.java
@@ -1,6 +1,6 @@
package cn.hutool.core.date;
-import cn.hutool.core.date.BetweenFormater.Level;
+import cn.hutool.core.date.BetweenFormatter.Level;
import org.junit.Assert;
import org.junit.Test;
diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java
index fb563707e..0500d3827 100644
--- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java
@@ -1,7 +1,7 @@
package cn.hutool.core.date;
import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.BetweenFormater.Level;
+import cn.hutool.core.date.BetweenFormatter.Level;
import cn.hutool.core.date.format.FastDateFormat;
import cn.hutool.core.util.RandomUtil;
import org.junit.Assert;