This commit is contained in:
Looly 2022-07-22 16:58:52 +08:00
parent f879f3084a
commit b74b7c682c
8 changed files with 261 additions and 327 deletions

View File

@ -635,57 +635,6 @@ public class DateUtil extends CalendarUtil {
return CalendarUtil.formatChineseDate(CalendarUtil.calendar(date), withTime);
}
/**
* 返回可读的时间间隔如1天20小时3分48秒
* @param milliSecond 毫秒
* @author zrh 455741807@qq.com
* @return
*/
public static String formatDuring(long milliSecond) {
final int i1000=1000;
if (milliSecond <= 0) {
return "小于1毫秒";
}
if (milliSecond < i1000) {
return milliSecond + "毫秒";
}
String result = "";
long days = milliSecond / (1000 * 60 * 60 * 24);
long hours = (milliSecond % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
long minutes = (milliSecond % (1000 * 60 * 60)) / (1000 * 60);
long seconds = (milliSecond % (1000 * 60)) / 1000;
if (days > 0) {
result += days + "";
}
if (hours > 0) {
result += hours + "小时";
}
if (minutes > 0) {
result += minutes + "";
}
if (seconds >= 0) {
result += seconds + "";
}
return result;
}
/**
* 返回两个日期之间间隔时间
* @param begin 开始日期
* @param end 结束日期
* @author zrh 455741807@qq.com
* @return
*/
public static String formatDuring(Date begin, Date end) {
if(begin == null || end == null) {
return "";
}
return formatDuring(end.getTime()-begin.getTime());
}
// ------------------------------------ Format end ----------------------------------------------
// ------------------------------------ Parse start ----------------------------------------------

View File

@ -39,46 +39,46 @@ public class DateUtilTest {
@Test
public void nowTest() {
// 当前时间
Date date = DateUtil.date();
final Date date = DateUtil.date();
Assert.assertNotNull(date);
// 当前时间
Date date2 = DateUtil.date(Calendar.getInstance());
final Date date2 = DateUtil.date(Calendar.getInstance());
Assert.assertNotNull(date2);
// 当前时间
Date date3 = DateUtil.date(System.currentTimeMillis());
final Date date3 = DateUtil.date(System.currentTimeMillis());
Assert.assertNotNull(date3);
// 当前日期字符串格式yyyy-MM-dd HH:mm:ss
String now = DateUtil.now();
final String now = DateUtil.now();
Assert.assertNotNull(now);
// 当前日期字符串格式yyyy-MM-dd
String today = DateUtil.today();
final String today = DateUtil.today();
Assert.assertNotNull(today);
}
@Test
public void formatAndParseTest() {
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);
final String dateStr = "2017-03-01";
final Date date = DateUtil.parse(dateStr);
String format = DateUtil.format(date, "yyyy/MM/dd");
final String format = DateUtil.format(date, "yyyy/MM/dd");
Assert.assertEquals("2017/03/01", format);
// 常用格式的格式化
String formatDate = DateUtil.formatDate(date);
final String formatDate = DateUtil.formatDate(date);
Assert.assertEquals("2017-03-01", formatDate);
String formatDateTime = DateUtil.formatDateTime(date);
final String formatDateTime = DateUtil.formatDateTime(date);
Assert.assertEquals("2017-03-01 00:00:00", formatDateTime);
String formatTime = DateUtil.formatTime(date);
final String formatTime = DateUtil.formatTime(date);
Assert.assertEquals("00:00:00", formatTime);
}
@Test
public void formatAndParseCustomTest() {
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);
final String dateStr = "2017-03-01";
final Date date = DateUtil.parse(dateStr);
String format = DateUtil.format(date, "#sss");
final String format = DateUtil.format(date, "#sss");
Assert.assertEquals("1488297600", format);
final DateTime parse = DateUtil.parse(format, "#sss");
@ -87,49 +87,26 @@ public class DateUtilTest {
@Test
public void formatAndParseCustomTest2() {
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);
final String dateStr = "2017-03-01";
final Date date = DateUtil.parse(dateStr);
String format = DateUtil.format(date, "#SSS");
final String format = DateUtil.format(date, "#SSS");
Assert.assertEquals("1488297600000", format);
final DateTime parse = DateUtil.parse(format, "#SSS");
Assert.assertEquals(date, parse);
}
@Test
public void formatDuring() {
long d = 56123456;
String s = DateUtil.formatDuring(d);
Assert.assertEquals("15小时35分23秒", s);
}
@Test
public void testFormatDuring() {
Calendar c = Calendar.getInstance();
Date s = c.getTime();
c.add(Calendar.DAY_OF_MONTH, 1);
c.add(Calendar.MINUTE, 2);
c.add(Calendar.SECOND, 3);
Date e = c.getTime();
String str = DateUtil.formatDuring(s, e);
Assert.assertEquals("1天2分3秒", str);
}
@Test
public void beginAndEndTest() {
String dateStr = "2017-03-01 00:33:23";
Date date = DateUtil.parse(dateStr);
final String dateStr = "2017-03-01 00:33:23";
final Date date = DateUtil.parse(dateStr);
// 一天的开始
Date beginOfDay = DateUtil.beginOfDay(date);
final Date beginOfDay = DateUtil.beginOfDay(date);
Assert.assertEquals("2017-03-01 00:00:00", beginOfDay.toString());
// 一天的结束
Date endOfDay = DateUtil.endOfDay(date);
final Date endOfDay = DateUtil.endOfDay(date);
Assert.assertEquals("2017-03-01 23:59:59", endOfDay.toString());
}
@ -141,16 +118,16 @@ public class DateUtilTest {
@Test
public void truncateTest() {
String dateStr2 = "2020-02-29 12:59:34";
Date date2 = DateUtil.parse(dateStr2);
final String dateStr2 = "2020-02-29 12:59:34";
final Date date2 = DateUtil.parse(dateStr2);
final DateTime dateTime = DateUtil.truncate(date2, DateField.MINUTE);
Assert.assertEquals("2020-02-29 12:59:00", dateTime.toString());
}
@Test
public void ceilingMinuteTest() {
String dateStr2 = "2020-02-29 12:59:34";
Date date2 = DateUtil.parse(dateStr2);
final String dateStr2 = "2020-02-29 12:59:34";
final Date date2 = DateUtil.parse(dateStr2);
DateTime dateTime = DateUtil.ceiling(date2, DateField.MINUTE);
@ -162,8 +139,8 @@ public class DateUtilTest {
@Test
public void ceilingDayTest() {
String dateStr2 = "2020-02-29 12:59:34";
Date date2 = DateUtil.parse(dateStr2);
final String dateStr2 = "2020-02-29 12:59:34";
final Date date2 = DateUtil.parse(dateStr2);
DateTime dateTime = DateUtil.ceiling(date2, DateField.DAY_OF_MONTH);
@ -175,64 +152,64 @@ public class DateUtilTest {
@Test
public void beginOfWeekTest() {
String dateStr = "2017-03-01 22:33:23";
DateTime date = DateUtil.parse(dateStr);
final String dateStr = "2017-03-01 22:33:23";
final DateTime date = DateUtil.parse(dateStr);
Objects.requireNonNull(date).setFirstDayOfWeek(Week.MONDAY);
// 一周的开始
Date beginOfWeek = DateUtil.beginOfWeek(date);
final Date beginOfWeek = DateUtil.beginOfWeek(date);
Assert.assertEquals("2017-02-27 00:00:00", beginOfWeek.toString());
// 一周的结束
Date endOfWeek = DateUtil.endOfWeek(date);
final Date endOfWeek = DateUtil.endOfWeek(date);
Assert.assertEquals("2017-03-05 23:59:59", endOfWeek.toString());
Calendar calendar = DateUtil.calendar(date);
final Calendar calendar = DateUtil.calendar(date);
// 一周的开始
Calendar begin = DateUtil.beginOfWeek(calendar);
final Calendar begin = DateUtil.beginOfWeek(calendar);
Assert.assertEquals("2017-02-27 00:00:00", DateUtil.date(begin).toString());
// 一周的结束
Calendar end = DateUtil.endOfWeek(calendar);
final Calendar end = DateUtil.endOfWeek(calendar);
Assert.assertEquals("2017-03-05 23:59:59", DateUtil.date(end).toString());
}
@Test
public void beginOfWeekTest2() {
String beginStr = "2020-03-11";
DateTime date = DateUtil.parseDate(beginStr);
Calendar calendar = date.toCalendar();
final String beginStr = "2020-03-11";
final DateTime date = DateUtil.parseDate(beginStr);
final Calendar calendar = date.toCalendar();
final Calendar begin = DateUtil.beginOfWeek(calendar, false);
Assert.assertEquals("2020-03-08 00:00:00", DateUtil.date(begin).toString());
Calendar calendar2 = date.toCalendar();
final Calendar calendar2 = date.toCalendar();
final Calendar end = DateUtil.endOfWeek(calendar2, false);
Assert.assertEquals("2020-03-14 23:59:59", DateUtil.date(end).toString());
}
@Test
public void offsetDateTest() {
String dateStr = "2017-03-01 22:33:23";
Date date = DateUtil.parse(dateStr);
final String dateStr = "2017-03-01 22:33:23";
final Date date = DateUtil.parse(dateStr);
Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
final Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
Assert.assertEquals("2017-03-03 22:33:23", newDate.toString());
// 偏移天
DateTime newDate2 = DateUtil.offsetDay(date, 3);
final DateTime newDate2 = DateUtil.offsetDay(date, 3);
Assert.assertEquals("2017-03-04 22:33:23", newDate2.toString());
// 偏移小时
DateTime newDate3 = DateUtil.offsetHour(date, -3);
final DateTime newDate3 = DateUtil.offsetHour(date, -3);
Assert.assertEquals("2017-03-01 19:33:23", newDate3.toString());
// 偏移月
DateTime offsetMonth = DateUtil.offsetMonth(date, -1);
final DateTime offsetMonth = DateUtil.offsetMonth(date, -1);
Assert.assertEquals("2017-02-01 22:33:23", offsetMonth.toString());
}
@Test
public void offsetMonthTest() {
DateTime st = DateUtil.parseDate("2018-05-31");
List<DateTime> list = new ArrayList<>();
final DateTime st = DateUtil.parseDate("2018-05-31");
final List<DateTime> list = new ArrayList<>();
for (int i = 0; i < 4; i++) {
list.add(DateUtil.offsetMonth(st, i));
}
@ -244,11 +221,11 @@ public class DateUtilTest {
@Test
public void betweenTest() {
String dateStr1 = "2017-03-01 22:34:23";
Date date1 = DateUtil.parse(dateStr1);
final String dateStr1 = "2017-03-01 22:34:23";
final Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2017-04-01 23:56:14";
Date date2 = DateUtil.parse(dateStr2);
final String dateStr2 = "2017-04-01 23:56:14";
final Date date2 = DateUtil.parse(dateStr2);
// 相差月
long betweenMonth = DateUtil.betweenMonth(date1, date2, false);
@ -295,13 +272,13 @@ public class DateUtilTest {
@Test
public void betweenTest2() {
long between = DateUtil.between(DateUtil.parse("2019-05-06 02:15:00"), DateUtil.parse("2019-05-06 02:20:00"), DateUnit.HOUR);
final long between = DateUtil.between(DateUtil.parse("2019-05-06 02:15:00"), DateUtil.parse("2019-05-06 02:20:00"), DateUnit.HOUR);
Assert.assertEquals(0, between);
}
@Test
public void betweenTest3() {
long between = DateUtil.between(DateUtil.parse("2020-03-31 23:59:59"), DateUtil.parse("2020-04-01 00:00:00"), DateUnit.SECOND);
final long between = DateUtil.between(DateUtil.parse("2020-03-31 23:59:59"), DateUtil.parse("2020-04-01 00:00:00"), DateUnit.SECOND);
Assert.assertEquals(1, between);
}
@ -325,20 +302,20 @@ public class DateUtilTest {
@Test
public void formatBetweenTest() {
String dateStr1 = "2017-03-01 22:34:23";
Date date1 = DateUtil.parse(dateStr1);
final String dateStr1 = "2017-03-01 22:34:23";
final Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2017-04-01 23:56:14";
Date date2 = DateUtil.parse(dateStr2);
final String dateStr2 = "2017-04-01 23:56:14";
final Date date2 = DateUtil.parse(dateStr2);
long between = DateUtil.between(date1, date2, DateUnit.MS);
String formatBetween = DateUtil.formatBetween(between, Level.MINUTE);
final long between = DateUtil.between(date1, date2, DateUnit.MS);
final String formatBetween = DateUtil.formatBetween(between, Level.MINUTE);
Assert.assertEquals("31天1小时21分", formatBetween);
}
@Test
public void timerTest() {
TimeInterval timer = DateUtil.timer();
final TimeInterval timer = DateUtil.timer();
// ---------------------------------
// -------这是执行过程
@ -351,23 +328,23 @@ public class DateUtilTest {
@Test
public void currentTest() {
long current = DateUtil.current();
String currentStr = String.valueOf(current);
final long current = DateUtil.current();
final String currentStr = String.valueOf(current);
Assert.assertEquals(13, currentStr.length());
long currentNano = DateUtil.current();
String currentNanoStr = String.valueOf(currentNano);
final long currentNano = DateUtil.current();
final String currentNanoStr = String.valueOf(currentNano);
Assert.assertNotNull(currentNanoStr);
}
@Test
public void weekOfYearTest() {
// 第一周周日
int weekOfYear1 = DateUtil.weekOfYear(DateUtil.parse("2016-01-03"));
final int weekOfYear1 = DateUtil.weekOfYear(DateUtil.parse("2016-01-03"));
Assert.assertEquals(1, weekOfYear1);
// 第二周周四
int weekOfYear2 = DateUtil.weekOfYear(DateUtil.parse("2016-01-07"));
final int weekOfYear2 = DateUtil.weekOfYear(DateUtil.parse("2016-01-07"));
Assert.assertEquals(2, weekOfYear2);
}
@ -397,34 +374,34 @@ public class DateUtilTest {
@Test
public void secondToTimeTest2() {
String s1 = "55:02:18";
String s2 = "55:00:50";
int i = DateUtil.timeToSecond(s1) + DateUtil.timeToSecond(s2);
String s = DateUtil.secondToTime(i);
final String s1 = "55:02:18";
final String s2 = "55:00:50";
final int i = DateUtil.timeToSecond(s1) + DateUtil.timeToSecond(s2);
final String s = DateUtil.secondToTime(i);
Assert.assertEquals("110:03:08", s);
}
@Test
public void parseTest2() {
// 转换时间与SimpleDateFormat结果保持一致即可
String birthday = "700403";
Date birthDate = DateUtil.parse(birthday, "yyMMdd");
final String birthday = "700403";
final Date birthDate = DateUtil.parse(birthday, "yyMMdd");
// 获取出生年(完全表现形式,2010)
int sYear = DateUtil.year(birthDate);
final int sYear = DateUtil.year(birthDate);
Assert.assertEquals(1970, sYear);
}
@Test
public void parseTest3() {
String dateStr = "2018-10-10 12:11:11";
Date date = DateUtil.parse(dateStr);
String format = DateUtil.format(date, DatePattern.NORM_DATETIME_PATTERN);
final String dateStr = "2018-10-10 12:11:11";
final Date date = DateUtil.parse(dateStr);
final String format = DateUtil.format(date, DatePattern.NORM_DATETIME_PATTERN);
Assert.assertEquals(dateStr, format);
}
@Test
public void parseTest4() {
String ymd = DateUtil.parse("2019-3-21 12:20:15", "yyyy-MM-dd").toString(DatePattern.PURE_DATE_PATTERN);
final String ymd = DateUtil.parse("2019-3-21 12:20:15", "yyyy-MM-dd").toString(DatePattern.PURE_DATE_PATTERN);
Assert.assertEquals("20190321", ymd);
}
@ -465,8 +442,8 @@ public class DateUtilTest {
@Test
public void parseTest6() {
String str = "Tue Jun 4 16:25:15 +0800 2019";
DateTime dateTime = DateUtil.parse(str);
final String str = "Tue Jun 4 16:25:15 +0800 2019";
final DateTime dateTime = DateUtil.parse(str);
assert dateTime != null;
Assert.assertEquals("2019-06-04 16:25:15", dateTime.toString());
}
@ -486,8 +463,8 @@ public class DateUtilTest {
@Test
public void parseTest8() {
String str = "2020-06-28T02:14:13.000Z";
DateTime dateTime = DateUtil.parse(str);
final String str = "2020-06-28T02:14:13.000Z";
final DateTime dateTime = DateUtil.parse(str);
assert dateTime != null;
Assert.assertEquals("2020-06-28 02:14:13", dateTime.toString());
}
@ -523,8 +500,8 @@ public class DateUtilTest {
*/
@Test
public void parseEmptyTest() {
String str = " ";
DateTime dateTime = DateUtil.parse(str);
final String str = " ";
final DateTime dateTime = DateUtil.parse(str);
Assert.assertNull(dateTime);
}
@ -545,34 +522,34 @@ public class DateUtilTest {
@Test
public void parseAndOffsetTest() {
// 检查UTC时间偏移是否准确
String str = "2019-09-17T13:26:17.948Z";
DateTime dateTime = DateUtil.parse(str);
final String str = "2019-09-17T13:26:17.948Z";
final DateTime dateTime = DateUtil.parse(str);
assert dateTime != null;
Assert.assertEquals("2019-09-17 13:26:17", dateTime.toString());
DateTime offset = DateUtil.offsetHour(dateTime, 8);
final DateTime offset = DateUtil.offsetHour(dateTime, 8);
Assert.assertEquals("2019-09-17 21:26:17", offset.toString());
}
@Test
public void parseDateTest() {
String dateStr = "2018-4-10";
Date date = DateUtil.parseDate(dateStr);
String format = DateUtil.format(date, DatePattern.NORM_DATE_PATTERN);
final String dateStr = "2018-4-10";
final Date date = DateUtil.parseDate(dateStr);
final String format = DateUtil.format(date, DatePattern.NORM_DATE_PATTERN);
Assert.assertEquals("2018-04-10", format);
}
@Test
public void parseToDateTimeTest1() {
String dateStr1 = "2017-02-01";
String dateStr2 = "2017/02/01";
String dateStr3 = "2017.02.01";
String dateStr4 = "2017年02月01日";
final String dateStr1 = "2017-02-01";
final String dateStr2 = "2017/02/01";
final String dateStr3 = "2017.02.01";
final String dateStr4 = "2017年02月01日";
DateTime dt1 = DateUtil.parse(dateStr1);
DateTime dt2 = DateUtil.parse(dateStr2);
DateTime dt3 = DateUtil.parse(dateStr3);
DateTime dt4 = DateUtil.parse(dateStr4);
final DateTime dt1 = DateUtil.parse(dateStr1);
final DateTime dt2 = DateUtil.parse(dateStr2);
final DateTime dt3 = DateUtil.parse(dateStr3);
final DateTime dt4 = DateUtil.parse(dateStr4);
Assert.assertEquals(dt1, dt2);
Assert.assertEquals(dt2, dt3);
Assert.assertEquals(dt3, dt4);
@ -580,15 +557,15 @@ public class DateUtilTest {
@Test
public void parseToDateTimeTest2() {
String dateStr1 = "2017-02-01 12:23";
String dateStr2 = "2017/02/01 12:23";
String dateStr3 = "2017.02.01 12:23";
String dateStr4 = "2017年02月01日 12:23";
final String dateStr1 = "2017-02-01 12:23";
final String dateStr2 = "2017/02/01 12:23";
final String dateStr3 = "2017.02.01 12:23";
final String dateStr4 = "2017年02月01日 12:23";
DateTime dt1 = DateUtil.parse(dateStr1);
DateTime dt2 = DateUtil.parse(dateStr2);
DateTime dt3 = DateUtil.parse(dateStr3);
DateTime dt4 = DateUtil.parse(dateStr4);
final DateTime dt1 = DateUtil.parse(dateStr1);
final DateTime dt2 = DateUtil.parse(dateStr2);
final DateTime dt3 = DateUtil.parse(dateStr3);
final DateTime dt4 = DateUtil.parse(dateStr4);
Assert.assertEquals(dt1, dt2);
Assert.assertEquals(dt2, dt3);
Assert.assertEquals(dt3, dt4);
@ -596,15 +573,15 @@ public class DateUtilTest {
@Test
public void parseToDateTimeTest3() {
String dateStr1 = "2017-02-01 12:23:45";
String dateStr2 = "2017/02/01 12:23:45";
String dateStr3 = "2017.02.01 12:23:45";
String dateStr4 = "2017年02月01日 12时23分45秒";
final String dateStr1 = "2017-02-01 12:23:45";
final String dateStr2 = "2017/02/01 12:23:45";
final String dateStr3 = "2017.02.01 12:23:45";
final String dateStr4 = "2017年02月01日 12时23分45秒";
DateTime dt1 = DateUtil.parse(dateStr1);
DateTime dt2 = DateUtil.parse(dateStr2);
DateTime dt3 = DateUtil.parse(dateStr3);
DateTime dt4 = DateUtil.parse(dateStr4);
final DateTime dt1 = DateUtil.parse(dateStr1);
final DateTime dt2 = DateUtil.parse(dateStr2);
final DateTime dt3 = DateUtil.parse(dateStr3);
final DateTime dt4 = DateUtil.parse(dateStr4);
Assert.assertEquals(dt1, dt2);
Assert.assertEquals(dt2, dt3);
Assert.assertEquals(dt3, dt4);
@ -612,21 +589,21 @@ public class DateUtilTest {
@Test
public void parseToDateTimeTest4() {
String dateStr1 = "2017-02-01 12:23:45";
String dateStr2 = "20170201122345";
final String dateStr1 = "2017-02-01 12:23:45";
final String dateStr2 = "20170201122345";
DateTime dt1 = DateUtil.parse(dateStr1);
DateTime dt2 = DateUtil.parse(dateStr2);
final DateTime dt1 = DateUtil.parse(dateStr1);
final DateTime dt2 = DateUtil.parse(dateStr2);
Assert.assertEquals(dt1, dt2);
}
@Test
public void parseToDateTimeTest5() {
String dateStr1 = "2017-02-01";
String dateStr2 = "20170201";
final String dateStr1 = "2017-02-01";
final String dateStr2 = "20170201";
DateTime dt1 = DateUtil.parse(dateStr1);
DateTime dt2 = DateUtil.parse(dateStr2);
final DateTime dt1 = DateUtil.parse(dateStr1);
final DateTime dt2 = DateUtil.parse(dateStr2);
Assert.assertEquals(dt1, dt2);
}
@ -636,7 +613,7 @@ public class DateUtilTest {
DateTime dt = DateUtil.parseUTC(dateStr1);
// parse方法支持UTC格式测试
DateTime dt2 = DateUtil.parse(dateStr1);
final DateTime dt2 = DateUtil.parse(dateStr1);
Assert.assertEquals(dt, dt2);
// 默认使用Pattern对应的时区即UTC时区
@ -720,9 +697,9 @@ public class DateUtilTest {
@Test
public void parseCSTTest() {
String dateStr = "Wed Sep 16 11:26:23 CST 2009";
final String dateStr = "Wed Sep 16 11:26:23 CST 2009";
SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.JDK_DATETIME_PATTERN, Locale.US);
final SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.JDK_DATETIME_PATTERN, Locale.US);
// Asia/Shanghai是以地区命名的地区标准时在中国叫CST因此如果解析CST时不使用"Asia/Shanghai"而使用"GMT+08:00"会导致相差一个小时
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
final DateTime parse = DateUtil.parse(dateStr, sdf);
@ -736,13 +713,13 @@ public class DateUtilTest {
@Test
public void parseCSTTest2() {
String dateStr = "Wed Sep 16 11:26:23 CST 2009";
final String dateStr = "Wed Sep 16 11:26:23 CST 2009";
SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.JDK_DATETIME_PATTERN, Locale.US);
final SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.JDK_DATETIME_PATTERN, Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
final DateTime parse = DateUtil.parse(dateStr, sdf);
FastDateFormat fdf = FastDateFormat.getInstance(DatePattern.JDK_DATETIME_PATTERN, TimeZone.getTimeZone("America/Chicago"), Locale.US);
final FastDateFormat fdf = FastDateFormat.getInstance(DatePattern.JDK_DATETIME_PATTERN, TimeZone.getTimeZone("America/Chicago"), Locale.US);
final DateTime parse2 = DateUtil.parse(dateStr, fdf);
Assert.assertEquals(parse, parse2);
@ -750,29 +727,29 @@ public class DateUtilTest {
@Test
public void parseJDkTest() {
String dateStr = "Thu May 16 17:57:18 GMT+08:00 2019";
DateTime time = DateUtil.parse(dateStr);
final String dateStr = "Thu May 16 17:57:18 GMT+08:00 2019";
final DateTime time = DateUtil.parse(dateStr);
Assert.assertEquals("2019-05-16 17:57:18", Objects.requireNonNull(time).toString());
}
@Test
public void parseISOTest() {
String dateStr = "2020-04-23T02:31:00.000Z";
DateTime time = DateUtil.parse(dateStr);
final String dateStr = "2020-04-23T02:31:00.000Z";
final DateTime time = DateUtil.parse(dateStr);
Assert.assertEquals("2020-04-23 02:31:00", Objects.requireNonNull(time).toString());
}
@Test
public void endOfYearTest() {
DateTime date = DateUtil.date();
final DateTime date = DateUtil.date();
date.setField(DateField.YEAR, 2019);
DateTime endOfYear = DateUtil.endOfYear(date);
final DateTime endOfYear = DateUtil.endOfYear(date);
Assert.assertEquals("2019-12-31 23:59:59", endOfYear.toString());
}
@Test
public void endOfQuarterTest() {
Date date = DateUtil.endOfQuarter(
final Date date = DateUtil.endOfQuarter(
DateUtil.parse("2020-05-31 00:00:00"));
Assert.assertEquals("2020-06-30 23:59:59", DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"));
@ -781,30 +758,30 @@ public class DateUtilTest {
@Test
public void endOfWeekTest() {
// 周日
DateTime now = DateUtil.parse("2019-09-15 13:00");
final DateTime now = DateUtil.parse("2019-09-15 13:00");
DateTime startOfWeek = DateUtil.beginOfWeek(now);
final DateTime startOfWeek = DateUtil.beginOfWeek(now);
Assert.assertEquals("2019-09-09 00:00:00", startOfWeek.toString());
DateTime endOfWeek = DateUtil.endOfWeek(now);
final DateTime endOfWeek = DateUtil.endOfWeek(now);
Assert.assertEquals("2019-09-15 23:59:59", endOfWeek.toString());
long between = DateUtil.between(endOfWeek, startOfWeek, DateUnit.DAY);
final long between = DateUtil.between(endOfWeek, startOfWeek, DateUnit.DAY);
// 周一和周日相距6天
Assert.assertEquals(6, between);
}
@Test
public void dayOfWeekTest() {
int dayOfWeek = DateUtil.dayOfWeek(DateUtil.parse("2018-03-07"));
final int dayOfWeek = DateUtil.dayOfWeek(DateUtil.parse("2018-03-07"));
Assert.assertEquals(Calendar.WEDNESDAY, dayOfWeek);
Week week = DateUtil.dayOfWeekEnum(DateUtil.parse("2018-03-07"));
final Week week = DateUtil.dayOfWeekEnum(DateUtil.parse("2018-03-07"));
Assert.assertEquals(Week.WEDNESDAY, week);
}
@Test
public void compareTest() {
Date date1 = DateUtil.parse("2021-04-13 23:59:59.999");
Date date2 = DateUtil.parse("2021-04-13 23:59:10");
final Date date1 = DateUtil.parse("2021-04-13 23:59:59.999");
final Date date2 = DateUtil.parse("2021-04-13 23:59:10");
Assert.assertEquals(1, DateUtil.compare(date1, date2));
Assert.assertEquals(1, DateUtil.compare(date1, date2, DatePattern.NORM_DATETIME_PATTERN));
@ -812,45 +789,45 @@ public class DateUtilTest {
Assert.assertEquals(0, DateUtil.compare(date1, date2, DatePattern.NORM_DATETIME_MINUTE_PATTERN));
Date date11 = DateUtil.parse("2021-04-13 23:59:59.999");
Date date22 = DateUtil.parse("2021-04-11 23:10:10");
final Date date11 = DateUtil.parse("2021-04-13 23:59:59.999");
final Date date22 = DateUtil.parse("2021-04-11 23:10:10");
Assert.assertEquals(0, DateUtil.compare(date11, date22, DatePattern.NORM_MONTH_PATTERN));
}
@Test
public void yearAndQTest() {
String yearAndQuarter = DateUtil.yearAndQuarter(DateUtil.parse("2018-12-01"));
final String yearAndQuarter = DateUtil.yearAndQuarter(DateUtil.parse("2018-12-01"));
Assert.assertEquals("20184", yearAndQuarter);
LinkedHashSet<String> yearAndQuarters = DateUtil.yearAndQuarter(DateUtil.parse("2018-09-10"), DateUtil.parse("2018-12-20"));
List<String> list = CollUtil.list(false, yearAndQuarters);
final LinkedHashSet<String> yearAndQuarters = DateUtil.yearAndQuarter(DateUtil.parse("2018-09-10"), DateUtil.parse("2018-12-20"));
final List<String> list = CollUtil.list(false, yearAndQuarters);
Assert.assertEquals(2, list.size());
Assert.assertEquals("20183", list.get(0));
Assert.assertEquals("20184", list.get(1));
LinkedHashSet<String> yearAndQuarters2 = DateUtil.yearAndQuarter(DateUtil.parse("2018-10-10"), DateUtil.parse("2018-12-10"));
List<String> list2 = CollUtil.list(false, yearAndQuarters2);
final LinkedHashSet<String> yearAndQuarters2 = DateUtil.yearAndQuarter(DateUtil.parse("2018-10-10"), DateUtil.parse("2018-12-10"));
final List<String> list2 = CollUtil.list(false, yearAndQuarters2);
Assert.assertEquals(1, list2.size());
Assert.assertEquals("20184", list2.get(0));
}
@Test
public void formatHttpDateTest() {
String formatHttpDate = DateUtil.formatHttpDate(DateUtil.parse("2019-01-02 22:32:01"));
final String formatHttpDate = DateUtil.formatHttpDate(DateUtil.parse("2019-01-02 22:32:01"));
Assert.assertEquals("Wed, 02 Jan 2019 14:32:01 GMT", formatHttpDate);
}
@Test
public void toInstantTest() {
LocalDateTime localDateTime = LocalDateTime.parse("2017-05-06T08:30:00", DateTimeFormatter.ISO_DATE_TIME);
final LocalDateTime localDateTime = LocalDateTime.parse("2017-05-06T08:30:00", DateTimeFormatter.ISO_DATE_TIME);
Instant instant = DateUtil.toInstant(localDateTime);
Assert.assertEquals("2017-05-06T00:30:00Z", instant.toString());
LocalDate localDate = localDateTime.toLocalDate();
final LocalDate localDate = localDateTime.toLocalDate();
instant = DateUtil.toInstant(localDate);
Assert.assertNotNull(instant);
LocalTime localTime = localDateTime.toLocalTime();
final LocalTime localTime = localDateTime.toLocalTime();
instant = DateUtil.toInstant(localTime);
Assert.assertNotNull(instant);
}
@ -858,13 +835,13 @@ public class DateUtilTest {
@Test
public void dateTest() {
//LocalDateTime ==> date
LocalDateTime localDateTime = LocalDateTime.parse("2017-05-06T08:30:00", DateTimeFormatter.ISO_DATE_TIME);
DateTime date = DateUtil.date(localDateTime);
final LocalDateTime localDateTime = LocalDateTime.parse("2017-05-06T08:30:00", DateTimeFormatter.ISO_DATE_TIME);
final DateTime date = DateUtil.date(localDateTime);
Assert.assertEquals("2017-05-06 08:30:00", date.toString());
//LocalDate ==> date
LocalDate localDate = localDateTime.toLocalDate();
DateTime date2 = DateUtil.date(localDate);
final LocalDate localDate = localDateTime.toLocalDate();
final DateTime date2 = DateUtil.date(localDate);
Assert.assertEquals("2017-05-06",
DateUtil.format(date2, DatePattern.NORM_DATE_PATTERN));
}
@ -872,45 +849,45 @@ public class DateUtilTest {
@Test
public void dateTest2() {
// 测试负数日期
long dateLong = -1497600000;
final long dateLong = -1497600000;
final DateTime date = DateUtil.date(dateLong);
Assert.assertEquals("1969-12-15 00:00:00", date.toString());
}
@Test
public void ageTest() {
String d1 = "2000-02-29";
String d2 = "2018-02-28";
final String d1 = "2000-02-29";
final String d2 = "2018-02-28";
final int age = DateUtil.age(DateUtil.parseDate(d1), DateUtil.parseDate(d2));
Assert.assertEquals(18, age);
}
@Test(expected = IllegalArgumentException.class)
public void ageTest2() {
String d1 = "2019-02-29";
String d2 = "2018-02-28";
final String d1 = "2019-02-29";
final String d2 = "2018-02-28";
DateUtil.age(DateUtil.parseDate(d1), DateUtil.parseDate(d2));
}
@Test
public void isExpiredTest() {
DateTime startDate = DateUtil.parse("2019-12-01 17:02:30");
DateTime endDate = DateUtil.parse("2019-12-02 17:02:30");
int length = 3;
final DateTime startDate = DateUtil.parse("2019-12-01 17:02:30");
final DateTime endDate = DateUtil.parse("2019-12-02 17:02:30");
final int length = 3;
//noinspection deprecation
boolean expired = DateUtil.isExpired(startDate, DateField.DAY_OF_YEAR, length, endDate);
final boolean expired = DateUtil.isExpired(startDate, DateField.DAY_OF_YEAR, length, endDate);
Assert.assertTrue(expired);
}
@Test
public void localDateTimeTest() {
// 测试字符串与LocalDateTime的互相转换
String strDate = "2019-12-01 17:02:30";
final String strDate = "2019-12-01 17:02:30";
LocalDateTime ldt = DateUtil.parseLocalDateTime(strDate);
String strDate1 = DateUtil.formatLocalDateTime(ldt);
Assert.assertEquals(strDate, strDate1);
String strDate2 = "2019-12-01 17:02:30.111";
final String strDate2 = "2019-12-01 17:02:30.111";
ldt = DateUtil.parseLocalDateTime(strDate2, DatePattern.NORM_DATETIME_MS_PATTERN);
strDate1 = DateUtil.format(ldt, DatePattern.NORM_DATETIME_PATTERN);
Assert.assertEquals(strDate, strDate1);
@ -919,7 +896,7 @@ public class DateUtilTest {
@Test
public void localDateTimeTest2() {
// 测试字符串与LocalDateTime的互相转换
String strDate = "2019-12-01";
final String strDate = "2019-12-01";
final LocalDateTime localDateTime = DateUtil.parseLocalDateTime(strDate, "yyyy-MM-dd");
Assert.assertEquals(strDate, DateUtil.format(localDateTime, DatePattern.NORM_DATE_PATTERN));
}
@ -936,8 +913,8 @@ public class DateUtilTest {
@Test
public void betweenDayTest() {
for (int i = 0; i < 1000; i++) {
String datr = RandomUtil.randomInt(1900, 2099) + "-01-20";
long betweenDay = DateUtil.betweenDay(
final String datr = RandomUtil.randomInt(1900, 2099) + "-01-20";
final long betweenDay = DateUtil.betweenDay(
DateUtil.parseDate("1970-01-01"),
DateUtil.parseDate(datr), false);
Assert.assertEquals(Math.abs(LocalDate.parse(datr).toEpochDay()), betweenDay);
@ -946,9 +923,9 @@ public class DateUtilTest {
@Test
public void dayOfYearTest() {
int dayOfYear = DateUtil.dayOfYear(DateUtil.parse("2020-01-01"));
final int dayOfYear = DateUtil.dayOfYear(DateUtil.parse("2020-01-01"));
Assert.assertEquals(1, dayOfYear);
int lengthOfYear = DateUtil.lengthOfYear(2020);
final int lengthOfYear = DateUtil.lengthOfYear(2020);
Assert.assertEquals(366, lengthOfYear);
}
@ -977,7 +954,7 @@ public class DateUtilTest {
@SuppressWarnings("ConstantConditions")
@Test
public void parseISO8601Test() {
String dt = "2020-06-03 12:32:12,333";
final String dt = "2020-06-03 12:32:12,333";
final DateTime parse = DateUtil.parse(dt);
Assert.assertEquals("2020-06-03 12:32:12", parse.toString());
}
@ -991,9 +968,9 @@ public class DateUtilTest {
@Test
public void formatTest() {
Calendar calendar = new GregorianCalendar();
final Calendar calendar = new GregorianCalendar();
calendar.set(2021, Calendar.JULY, 14, 23, 59, 59);
Date date = new DateTime(calendar);
final Date date = new DateTime(calendar);
Assert.assertEquals("2021-07-14 23:59:59", DateUtil.format(date, DatePattern.NORM_DATETIME_FORMATTER));
Assert.assertEquals("2021-07-14 23:59:59", DateUtil.format(date, DatePattern.NORM_DATETIME_FORMAT));
@ -1060,24 +1037,24 @@ public class DateUtilTest {
@Test
@SuppressWarnings("ConstantConditions")
public void isOverlapTest() {
DateTime oneStartTime = DateUtil.parse("2022-01-01 10:10:10");
DateTime oneEndTime = DateUtil.parse("2022-01-01 11:10:10");
final DateTime oneStartTime = DateUtil.parse("2022-01-01 10:10:10");
final DateTime oneEndTime = DateUtil.parse("2022-01-01 11:10:10");
DateTime oneStartTime2 = DateUtil.parse("2022-01-01 11:20:10");
DateTime oneEndTime2 = DateUtil.parse("2022-01-01 11:30:10");
final DateTime oneStartTime2 = DateUtil.parse("2022-01-01 11:20:10");
final DateTime oneEndTime2 = DateUtil.parse("2022-01-01 11:30:10");
DateTime oneStartTime3 = DateUtil.parse("2022-01-01 11:40:10");
DateTime oneEndTime3 = DateUtil.parse("2022-01-01 11:50:10");
final DateTime oneStartTime3 = DateUtil.parse("2022-01-01 11:40:10");
final DateTime oneEndTime3 = DateUtil.parse("2022-01-01 11:50:10");
//真实请假数据
DateTime realStartTime = DateUtil.parse("2022-01-01 11:49:10");
DateTime realEndTime = DateUtil.parse("2022-01-01 12:00:10");
final DateTime realStartTime = DateUtil.parse("2022-01-01 11:49:10");
final DateTime realEndTime = DateUtil.parse("2022-01-01 12:00:10");
DateTime realStartTime1 = DateUtil.parse("2022-03-01 08:00:00");
DateTime realEndTime1 = DateUtil.parse("2022-03-01 10:00:00");
final DateTime realStartTime1 = DateUtil.parse("2022-03-01 08:00:00");
final DateTime realEndTime1 = DateUtil.parse("2022-03-01 10:00:00");
DateTime startTime = DateUtil.parse("2022-03-23 05:00:00");
DateTime endTime = DateUtil.parse("2022-03-23 13:00:00");
final DateTime startTime = DateUtil.parse("2022-03-23 05:00:00");
final DateTime endTime = DateUtil.parse("2022-03-23 13:00:00");
Assert.assertFalse(DateUtil.isOverlap(oneStartTime, oneEndTime, realStartTime, realEndTime));
Assert.assertFalse(DateUtil.isOverlap(oneStartTime2, oneEndTime2, realStartTime, realEndTime));
@ -1089,21 +1066,21 @@ public class DateUtilTest {
@Test
public void isOverlapTest2() {
DateTime oneStartTime = DateUtil.parseDate("2021-02-01");
DateTime oneEndTime = DateUtil.parseDate("2022-06-30");
final DateTime oneStartTime = DateUtil.parseDate("2021-02-01");
final DateTime oneEndTime = DateUtil.parseDate("2022-06-30");
DateTime oneStartTime2 = DateUtil.parseDate("2019-04-05");
DateTime oneEndTime2 = DateUtil.parseDate("2021-04-05");
final DateTime oneStartTime2 = DateUtil.parseDate("2019-04-05");
final DateTime oneEndTime2 = DateUtil.parseDate("2021-04-05");
Assert.assertTrue(DateUtil.isOverlap(oneStartTime, oneEndTime, oneStartTime2, oneEndTime2));
}
@Test
public void isInTest(){
String sourceStr = "2022-04-19 00:00:00";
String startTimeStr = "2022-04-19 00:00:00";
String endTimeStr = "2022-04-19 23:59:59";
boolean between = DateUtil.isIn(DateUtil.parse(startTimeStr),
final String sourceStr = "2022-04-19 00:00:00";
final String startTimeStr = "2022-04-19 00:00:00";
final String endTimeStr = "2022-04-19 23:59:59";
final boolean between = DateUtil.isIn(DateUtil.parse(startTimeStr),
DateUtil.parse(endTimeStr),
DateUtil.parse(sourceStr));
Assert.assertTrue(between);

View File

@ -133,7 +133,7 @@ public final class InternalJSONUtil {
/**
* 将Property的键转化为JSON形式<br>
* 用于识别类似于com.luxiaolei.package.hutool这类用点隔开的键<br>
* 注意不允许重复键
* 注意是否允许重复键取决于JSONObject配置
*
* @param jsonObject JSONObject
* @param key
@ -142,18 +142,18 @@ public final class InternalJSONUtil {
*/
static JSONObject propertyPut(JSONObject jsonObject, Object key, Object value, Filter<MutablePair<String, Object>> filter) {
final String[] path = StrUtil.splitToArray(Convert.toStr(key), CharUtil.DOT);
int last = path.length - 1;
final int last = path.length - 1;
JSONObject target = jsonObject;
for (int i = 0; i < last; i += 1) {
String segment = path[i];
final String segment = path[i];
JSONObject nextTarget = target.getJSONObject(segment);
if (nextTarget == null) {
nextTarget = new JSONObject(target.getConfig());
target.setOnce(segment, nextTarget, filter);
target.set(segment, nextTarget, filter, target.getConfig().isCheckDuplicate());
}
target = nextTarget;
}
target.setOnce(path[last], value, filter);
target.set(path[last], value, filter, target.getConfig().isCheckDuplicate());
return jsonObject;
}

View File

@ -45,9 +45,9 @@ public class JSONConfig implements Serializable {
private boolean stripTrailingZeros = true;
/**
* 是否忽略多个相同的key
* 是否检查重复key
*/
private boolean ignoreDuplicateKey = false;
private boolean checkDuplicate;
/**
* 创建默认的配置项
@ -242,20 +242,24 @@ public class JSONConfig implements Serializable {
}
/**
* 是否忽略多个相同的key
* @return
* 是否检查多个相同的key
*
* @return 是否检查多个相同的key
* @since 5.8.5
*/
public boolean isIgnoreDuplicateKey() {
return ignoreDuplicateKey;
public boolean isCheckDuplicate() {
return checkDuplicate;
}
/**
* 是否忽略多个相同的key
* @param ignoreDuplicateKey
* @return
* 是否检查多个相同的key
*
* @param checkDuplicate 是否检查多个相同的key
* @return this
* @since 5.8.5
*/
public JSONConfig setIgnoreDuplicateKey(boolean ignoreDuplicateKey) {
this.ignoreDuplicateKey = ignoreDuplicateKey;
public JSONConfig setCheckDuplicate(boolean checkDuplicate) {
this.checkDuplicate = checkDuplicate;
return this;
}
}

View File

@ -236,7 +236,7 @@ public class JSONObject extends MapWrapper<String, Object> implements JSON, JSON
Object value;
for (String name : names) {
value = ((Map<?, ?>) source).get(name);
this.putOnce(name, value);
this.set(name, value, null, getConfig().isCheckDuplicate());
}
} else {
for (String name : names) {
@ -392,9 +392,7 @@ public class JSONObject extends MapWrapper<String, Object> implements JSON, JSON
// 忽略值模式下如果值为空清除key
this.remove(key);
} else {
/*如果允许多个key就不抛出异常使用后面的值覆盖前面的值*/
boolean ignoreDuplicateKey = this.config.isIgnoreDuplicateKey();
if (checkDuplicate && containsKey(key) && false == ignoreDuplicateKey) {
if (checkDuplicate && containsKey(key)) {
throw new JSONException("Duplicate key \"{}\"", key);
}

View File

@ -69,7 +69,7 @@ public class JSONParser {
throw tokener.syntaxError("Expected a ':' after a key");
}
jsonObject.setOnce(key, tokener.nextValue(), filter);
jsonObject.set(key, tokener.nextValue(), filter, jsonObject.getConfig().isCheckDuplicate());
// Pairs are separated by ','.

View File

@ -88,11 +88,11 @@ public class ObjectMapper {
if (source instanceof Map) {
// Map
for (final Map.Entry<?, ?> e : ((Map<?, ?>) source).entrySet()) {
jsonObject.set(Convert.toStr(e.getKey()), e.getValue(), filter, false);
jsonObject.set(Convert.toStr(e.getKey()), e.getValue(), filter, jsonObject.getConfig().isCheckDuplicate());
}
} else if (source instanceof Map.Entry) {
final Map.Entry entry = (Map.Entry) source;
jsonObject.set(Convert.toStr(entry.getKey()), entry.getValue(), filter, false);
jsonObject.set(Convert.toStr(entry.getKey()), entry.getValue(), filter, jsonObject.getConfig().isCheckDuplicate());
} else if (source instanceof CharSequence) {
// 可能为JSON字符串
mapFromStr((CharSequence) source, jsonObject, filter);

View File

@ -26,7 +26,7 @@ public class JSONUtilTest {
*/
@Test(expected = JSONException.class)
public void parseTest() {
JSONArray jsonArray = JSONUtil.parseArray("[{\"a\":\"a\\x]");
final JSONArray jsonArray = JSONUtil.parseArray("[{\"a\":\"a\\x]");
Console.log(jsonArray);
}
@ -35,7 +35,7 @@ public class JSONUtilTest {
*/
@Test(expected = JSONException.class)
public void parseNumberTest() {
JSONArray json = JSONUtil.parseArray(123L);
final JSONArray json = JSONUtil.parseArray(123L);
Assert.assertNotNull(json);
}
@ -44,42 +44,42 @@ public class JSONUtilTest {
*/
@Test
public void parseNumberTest2() {
JSONObject json = JSONUtil.parseObj(123L);
final JSONObject json = JSONUtil.parseObj(123L);
Assert.assertEquals(new JSONObject(), json);
}
@Test
public void toJsonStrTest() {
UserA a1 = new UserA();
final UserA a1 = new UserA();
a1.setA("aaaa");
a1.setDate(DateUtil.date());
a1.setName("AAAAName");
UserA a2 = new UserA();
final UserA a2 = new UserA();
a2.setA("aaaa222");
a2.setDate(DateUtil.date());
a2.setName("AAAA222Name");
ArrayList<UserA> list = CollectionUtil.newArrayList(a1, a2);
HashMap<String, Object> map = MapUtil.newHashMap();
final ArrayList<UserA> list = CollectionUtil.newArrayList(a1, a2);
final HashMap<String, Object> map = MapUtil.newHashMap();
map.put("total", 13);
map.put("rows", list);
String str = JSONUtil.toJsonPrettyStr(map);
final String str = JSONUtil.toJsonPrettyStr(map);
JSONUtil.parse(str);
Assert.assertNotNull(str);
}
@Test
public void toJsonStrTest2() {
Map<String, Object> model = new HashMap<>();
final Map<String, Object> model = new HashMap<>();
model.put("mobile", "17610836523");
model.put("type", 1);
Map<String, Object> data = new HashMap<>();
final Map<String, Object> data = new HashMap<>();
data.put("model", model);
data.put("model2", model);
JSONObject jsonObject = JSONUtil.parseObj(data);
final JSONObject jsonObject = JSONUtil.parseObj(data);
Assert.assertTrue(jsonObject.containsKey("model"));
Assert.assertEquals(1, jsonObject.getJSONObject("model").getInt("type").intValue());
@ -90,25 +90,25 @@ public class JSONUtilTest {
@Test
public void toJsonStrTest3() {
// 验证某个字段为JSON字符串时转义是否规范
JSONObject object = new JSONObject(true);
final JSONObject object = new JSONObject(true);
object.set("name", "123123");
object.set("value", "\\");
object.set("value2", "</");
HashMap<String, String> map = MapUtil.newHashMap();
final HashMap<String, String> map = MapUtil.newHashMap();
map.put("user", object.toString());
JSONObject json = JSONUtil.parseObj(map);
final JSONObject json = JSONUtil.parseObj(map);
Assert.assertEquals("{\"name\":\"123123\",\"value\":\"\\\\\",\"value2\":\"</\"}", json.get("user"));
Assert.assertEquals("{\"user\":\"{\\\"name\\\":\\\"123123\\\",\\\"value\\\":\\\"\\\\\\\\\\\",\\\"value2\\\":\\\"</\\\"}\"}", json.toString());
JSONObject json2 = JSONUtil.parseObj(json.toString());
final JSONObject json2 = JSONUtil.parseObj(json.toString());
Assert.assertEquals("{\"name\":\"123123\",\"value\":\"\\\\\",\"value2\":\"</\"}", json2.get("user"));
}
@Test
public void toJsonStrFromSortedTest() {
SortedMap<Object, Object> sortedMap = new TreeMap<Object, Object>() {
final SortedMap<Object, Object> sortedMap = new TreeMap<Object, Object>() {
private static final long serialVersionUID = 1L;
{
@ -125,20 +125,20 @@ public class JSONUtilTest {
*/
@Test
public void toBeanTest() {
String json = "{\"ADT\":[[{\"BookingCode\":[\"N\",\"N\"]}]]}";
final String json = "{\"ADT\":[[{\"BookingCode\":[\"N\",\"N\"]}]]}";
Price price = JSONUtil.toBean(json, Price.class);
final Price price = JSONUtil.toBean(json, Price.class);
Assert.assertEquals("N", price.getADT().get(0).get(0).getBookingCode().get(0));
}
@Test
public void toBeanTest2() {
// 测试JSONObject转为Bean中字符串字段的情况
String json = "{\"id\":123,\"name\":\"张三\",\"prop\":{\"gender\":\"\", \"age\":18}}";
UserC user = JSONUtil.toBean(json, UserC.class);
final String json = "{\"id\":123,\"name\":\"张三\",\"prop\":{\"gender\":\"\", \"age\":18}}";
final UserC user = JSONUtil.toBean(json, UserC.class);
Assert.assertNotNull(user.getProp());
String prop = user.getProp();
JSONObject propJson = JSONUtil.parseObj(prop);
final String prop = user.getProp();
final JSONObject propJson = JSONUtil.parseObj(prop);
Assert.assertEquals("", propJson.getStr("gender"));
Assert.assertEquals(18, propJson.getInt("age").intValue());
// Assert.assertEquals("{\"age\":18,\"gender\":\"\"}", user.getProp());
@ -146,22 +146,22 @@ public class JSONUtilTest {
@Test
public void getStrTest() {
String html = "{\"name\":\"Something must have been changed since you leave\"}";
JSONObject jsonObject = JSONUtil.parseObj(html);
final String html = "{\"name\":\"Something must have been changed since you leave\"}";
final JSONObject jsonObject = JSONUtil.parseObj(html);
Assert.assertEquals("Something must have been changed since you leave", jsonObject.getStr("name"));
}
@Test
public void getStrTest2() {
String html = "{\"name\":\"Something\\u00a0must have been changed since you leave\"}";
JSONObject jsonObject = JSONUtil.parseObj(html);
final String html = "{\"name\":\"Something\\u00a0must have been changed since you leave\"}";
final JSONObject jsonObject = JSONUtil.parseObj(html);
Assert.assertEquals("Something\\u00a0must\\u00a0have\\u00a0been\\u00a0changed\\u00a0since\\u00a0you\\u00a0leave", jsonObject.getStrEscaped("name"));
}
@Test
public void parseFromXmlTest() {
String s = "<sfzh>640102197312070614</sfzh><sfz>640102197312070614X</sfz><name>aa</name><gender>1</gender>";
JSONObject json = JSONUtil.parseFromXml(s);
final String s = "<sfzh>640102197312070614</sfzh><sfz>640102197312070614X</sfz><name>aa</name><gender>1</gender>";
final JSONObject json = JSONUtil.parseFromXml(s);
Assert.assertEquals(640102197312070614L, json.get("sfzh"));
Assert.assertEquals("640102197312070614X", json.get("sfz"));
Assert.assertEquals("aa", json.get("name"));
@ -170,7 +170,7 @@ public class JSONUtilTest {
@Test
public void doubleTest() {
String json = "{\"test\": 12.00}";
final String json = "{\"test\": 12.00}";
final JSONObject jsonObject = JSONUtil.parseObj(json);
//noinspection BigDecimalMethodWithoutRoundingCalled
Assert.assertEquals("12.00", jsonObject.getBigDecimal("test").setScale(2).toString());
@ -222,7 +222,7 @@ public class JSONUtilTest {
@Test
public void parseBigNumberTest(){
// 科学计数法使用BigDecimal处理默认输出非科学计数形式
String str = "{\"test\":100000054128897953e4}";
final String str = "{\"test\":100000054128897953e4}";
Assert.assertEquals("{\"test\":1000000541288979530000}", JSONUtil.parseObj(str).toString());
}
@ -236,12 +236,18 @@ public class JSONUtilTest {
}
@Test
public void testDuplicateKey(){
String str = "{id:123, name:\"张三\", name:\"李四\"}";
public void duplicateKeyFalseTest(){
final String str = "{id:123, name:\"张三\", name:\"李四\"}";
JSONObject jsonObject = JSONUtil.parseObj(str, JSONConfig.create().setIgnoreDuplicateKey(true));
System.out.println(jsonObject.toString());
final JSONObject jsonObject = JSONUtil.parseObj(str, JSONConfig.create().setCheckDuplicate(false));
Assert.assertEquals("{\"id\":123,\"name\":\"李四\"}", jsonObject.toString());
}
Assert.assertNotNull(jsonObject);
@Test(expected = JSONException.class)
public void duplicateKeyTrueTest(){
final String str = "{id:123, name:\"张三\", name:\"李四\"}";
final JSONObject jsonObject = JSONUtil.parseObj(str, JSONConfig.create().setCheckDuplicate(true));
Assert.assertEquals("{\"id\":123,\"name\":\"李四\"}", jsonObject.toString());
}
}