From 71ab8335cedd030d27307e0e2b53c3840b43928a Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 14 Nov 2020 00:54:37 +0800 Subject: [PATCH] change name --- .../cn/hutool/core/date/BetweenFormater.java | 202 +--------------- .../cn/hutool/core/date/BetweenFormatter.java | 215 ++++++++++++++++++ .../java/cn/hutool/core/date/DateBetween.java | 4 +- .../java/cn/hutool/core/date/DateTime.java | 2 +- .../java/cn/hutool/core/date/DateUtil.java | 8 +- .../hutool/core/date/BetweenFormaterTest.java | 8 +- .../cn/hutool/core/date/DateBetweenTest.java | 2 +- .../cn/hutool/core/date/DateUtilTest.java | 2 +- 8 files changed, 235 insertions(+), 208 deletions(-) create mode 100644 hutool-core/src/main/java/cn/hutool/core/date/BetweenFormatter.java 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()}方法后返回类似于: + * + * + * @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;