From 9ba833313c83ade579efebc51e5bad92ec21ef31 Mon Sep 17 00:00:00 2001 From: mochouZero555 Date: Sat, 11 Feb 2023 22:03:53 +0800 Subject: [PATCH 1/2] =?UTF-8?q?IssueI6E6ZG=20=E6=B3=95=E5=AE=9A=E5=B9=B4?= =?UTF-8?q?=E9=BE=84=20=E7=94=B1=E8=99=9A=E5=B2=81=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E6=94=B9=E6=9C=AA=E5=91=A8=E5=B2=81=E8=AE=A1=E7=AE=97=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E5=A2=9E=E5=8A=A0=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/hutool/core/date/CalendarUtil.java | 12 ++++++++---- .../src/main/java/cn/hutool/core/date/DateUtil.java | 2 +- .../test/java/cn/hutool/core/date/DateUtilTest.java | 12 ++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java index c696fc0c3..80ce668d4 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java @@ -626,7 +626,7 @@ public class CalendarUtil { } /** - * 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄 + * 计算相对于dateToCompare的年龄,常用于计算指定生日在某年的年龄 * * @param birthday 生日 * @param dateToCompare 需要对比的日期 @@ -649,12 +649,16 @@ public class CalendarUtil { int age = year - cal.get(Calendar.YEAR); final int monthBirth = cal.get(Calendar.MONTH); - if (month == monthBirth) { + + //当前日期,则为0岁 + if (age == 0){ + return 0; + } else if (month == monthBirth) { final int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); final boolean isLastDayOfMonthBirth = dayOfMonthBirth == cal.getActualMaximum(Calendar.DAY_OF_MONTH); - if ((false == isLastDayOfMonth || false == isLastDayOfMonthBirth) && dayOfMonth < dayOfMonthBirth) { - // 如果生日在当月,但是未达到生日当天的日期,年龄减一 + if ((false == isLastDayOfMonth || false == isLastDayOfMonthBirth) && dayOfMonth <= dayOfMonthBirth) { + // 如果生日在当月,但是未超过生日当天的日期,年龄减一 age--; } } else if (month < monthBirth) { 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 f0fa65ab5..e7df01330 100755 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -1795,7 +1795,7 @@ public class DateUtil extends CalendarUtil { } /** - * 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄 + * 计算相对于dateToCompare的年龄,常用于计算指定生日在某年的年龄 * * @param birthday 生日 * @param dateToCompare 需要对比的日期 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 b406c2fe6..8472d077e 100755 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -1130,4 +1130,16 @@ public class DateUtilTest { Assert.assertEquals("2021-03-17 06:31:33", dateTime3.toString()); } + /** + * issue#I6E6ZG 法定年龄/周岁/实岁计算 + */ + @Test + public void ageOfNowTest() { + DateTime concurrentDate = DateUtil.date(); + DateTime birthDay = DateUtil.offset(concurrentDate, DateField.YEAR, -71); + Assert.assertEquals(70, DateUtil.ageOfNow(birthDay)); + Assert.assertEquals(71, DateUtil.ageOfNow(DateUtil.offsetDay(birthDay, -1))); + Assert.assertEquals(0, DateUtil.ageOfNow(concurrentDate)); + } + } From 83f87bf9d916bba65c63f778eca4fee48f555449 Mon Sep 17 00:00:00 2001 From: mochouZero555 Date: Tue, 14 Feb 2023 10:07:31 +0800 Subject: [PATCH 2/2] =?UTF-8?q?IssueI6EUXQ=20=E4=BF=AE=E5=A4=8D=E9=80=9A?= =?UTF-8?q?=E8=BF=87JDBC=20URL=E7=AD=89=E4=BF=A1=E6=81=AF=E8=AF=86?= =?UTF-8?q?=E5=88=ABJDBC=E9=A9=B1=E5=8A=A8=20=E6=97=B6=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8A=E9=83=A8=E5=88=86=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/db/dialect/DialectFactory.java | 8 ++- .../hutool/db/dialect/DialectFactoryTest.java | 51 +++++++++++++++++++ 2 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 hutool-db/src/test/java/cn/hutool/db/dialect/DialectFactoryTest.java diff --git a/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java b/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java index ef6b81cab..0e439019a 100755 --- a/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java +++ b/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java @@ -153,18 +153,16 @@ public class DialectFactory implements DriverNamePool { // 华为高斯 driver = DRIVER_GAUSS; } else if (nameContainsProductInfo.contains("gbase")) { - // 华为高斯 + // 南大通用数据库 driver = DRIVER_GBASE; } else if (nameContainsProductInfo.contains("oscar")) { // 神州数据库 driver = DRIVER_OSCAR; } else if (nameContainsProductInfo.contains("sybase")) { - // 神州数据库 + // Sybase driver = DRIVER_SYBASE; - } else if (nameContainsProductInfo.contains("xugu")) { - // 虚谷数据库 - driver = DRIVER_XUGO; }else if (nameContainsProductInfo.contains("mariadb")) { + // mariadb driver = DRIVER_MARIADB; } diff --git a/hutool-db/src/test/java/cn/hutool/db/dialect/DialectFactoryTest.java b/hutool-db/src/test/java/cn/hutool/db/dialect/DialectFactoryTest.java new file mode 100644 index 000000000..77f86607e --- /dev/null +++ b/hutool-db/src/test/java/cn/hutool/db/dialect/DialectFactoryTest.java @@ -0,0 +1,51 @@ +package cn.hutool.db.dialect; + +import cn.hutool.core.util.RandomUtil; +import org.junit.Assert; +import org.junit.Test; + + +import java.util.HashMap; + +import java.util.Map; + +import static cn.hutool.db.dialect.DriverNamePool.*; + +public class DialectFactoryTest { + + @Test + public void identifyDriverTest(){ + + Map map = new HashMap<>(25); + map.put("mysql",DRIVER_MYSQL_V6); + map.put("cobar",DRIVER_MYSQL_V6); + map.put("oracle",DRIVER_ORACLE); + map.put("postgresql",DRIVER_POSTGRESQL); + map.put("sqlite",DRIVER_SQLLITE3); + map.put("sqlserver",DRIVER_SQLSERVER); + map.put("microsoft",DRIVER_SQLSERVER); + map.put("hive2",DRIVER_HIVE2); + map.put("hive",DRIVER_HIVE); + map.put("h2",DRIVER_H2); + map.put("derby",DRIVER_DERBY); + map.put("hsqldb",DRIVER_HSQLDB); + map.put("dm",DRIVER_DM7); + map.put("kingbase8",DRIVER_KINGBASE8); + map.put("ignite",DRIVER_IGNITE_THIN); + map.put("clickhouse",DRIVER_CLICK_HOUSE); + map.put("highgo",DRIVER_HIGHGO); + map.put("db2",DRIVER_DB2); + map.put("xugu",DRIVER_XUGU); + map.put("phoenix",DRIVER_PHOENIX); + map.put("zenith",DRIVER_GAUSS); + map.put("gbase",DRIVER_GBASE); + map.put("oscar",DRIVER_OSCAR); + map.put("sybase",DRIVER_SYBASE); + map.put("mariadb",DRIVER_MARIADB); + + + map.forEach((k,v) -> Assert.assertEquals(v, + DialectFactory.identifyDriver(k+ RandomUtil.randomString(2),null) )); + + } +}