Browse Source

change name

Looly 5 years ago
parent
commit
71ab8335ce

+ 7 - 195
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;
-
 /**
- * 时长格式化器
+ * 时长格式化器<br>
+ *
  *
  * @author Looly
+ * @deprecated 拼写错误,请使用{@link BetweenFormatter}
  */
-public class BetweenFormater implements Serializable {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 时长毫秒数
-	 */
-	private long betweenMs;
-	/**
-	 * 格式化级别
-	 */
-	private Level level;
-	/**
-	 * 格式化级别的最大个数
-	 */
-	private final int levelMaxCount;
+@Deprecated
+public class BetweenFormater extends BetweenFormatter {
 
-	/**
-	 * 构造
-	 *
-	 * @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;
-	}
-
-	/**
-	 * 格式化日期间隔输出<br>
-	 *
-	 * @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();
-	}
-
-	/**
-	 * 等级数量是否有效<br>
-	 * 有效的定义是:levelMaxCount大于0(被设置),当前等级数量没有超过这个最大值
-	 *
-	 * @param levelCount 登记数量
-	 * @return 是否有效
-	 */
-	private boolean isLevelCountValid(int levelCount) {
-		return this.levelMaxCount <= 0 || levelCount < this.levelMaxCount;
+		super(betweenMs, level, levelMaxCount);
 	}
 }

+ 215 - 0
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;
+
+/**
+ * 时长格式化器,用于格式化输出两个日期相差的时长<br>
+ * 根据{@link Level}不同,调用{@link #format()}方法后返回类似于:
+ * <ul>
+ *    <li>XX小时XX分XX秒</li>
+ *    <li>XX天XX小时</li>
+ *    <li>XX月XX天XX小时</li>
+ * </ul>
+ *
+ * @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;
+	}
+
+	/**
+	 * 格式化日期间隔输出<br>
+	 *
+	 * @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();
+	}
+
+	/**
+	 * 等级数量是否有效<br>
+	 * 有效的定义是:levelMaxCount大于0(被设置),当前等级数量没有超过这个最大值
+	 *
+	 * @param levelCount 登记数量
+	 * @return 是否有效
+	 */
+	private boolean isLevelCountValid(int levelCount) {
+		return this.levelMaxCount <= 0 || levelCount < this.levelMaxCount;
+	}
+}

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

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

+ 4 - 4
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();
 	}
 
 	/**

+ 4 - 4
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秒");
 	}
 }

+ 1 - 1
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;
 

+ 1 - 1
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;