mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
change name
This commit is contained in:
parent
99eeb30ffe
commit
71ab8335ce
@ -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;
|
||||
@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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化日期间隔输出<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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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,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,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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user