Compare commits

...

16 Commits

Author SHA1 Message Date
b0fce37a3e release: 1.0.4
Co-authored-by: ZhouXY108 <luquanlion@outlook.com>
Co-committed-by: ZhouXY108 <luquanlion@outlook.com>
2025-05-02 14:31:54 +08:00
b6017454c7 docs: 修改 MultiTypesException 文档描述
Co-authored-by: ZhouXY108 <luquanlion@outlook.com>
Co-committed-by: ZhouXY108 <luquanlion@outlook.com>
2025-05-02 14:04:51 +08:00
6d5da7ab32 chore: 修改注释中的拼写错误
Co-authored-by: ZhouXY108 <luquanlion@outlook.com>
Co-committed-by: ZhouXY108 <luquanlion@outlook.com>
2025-05-02 13:55:38 +08:00
473e1ce223 release: 1.0.3 2025-04-19 02:03:11 +08:00
3b9f0a30c2 chore: 更新依赖 2025-04-19 02:02:31 +08:00
34076294a7 fix: 修复 JDK17+ 环境下测试用例 PagingAndSortingQueryParamsTests#testGson 不通过的问题
该用例在 JDK17+ 环境下使用 gson 进行序列化时,报 `com.google.gson.JsonIOException: Failed making field 'java.time.LocalDateTime#date' accessible; either increase its visibility or write a custom TypeAdapter for its declaring type`。

See: https://github.com/google/gson/blob/main/Troubleshooting.md#reflection-inaccessible
2025-04-19 02:01:32 +08:00
c6df5cd925 docs: fix param name 2025-04-19 02:00:52 +08:00
91c0c18960 1.0.2 2025-04-03 11:55:26 +08:00
bc7b3eefa8 fix: 补充 ThrowingPredicate 缺失的 FunctionalInterface 注解 2025-04-03 11:51:32 +08:00
746603f939 1.0.1 2025-03-28 12:10:44 +08:00
73a99b630c doc: 修改 since 信息
1.0.0 之前新增的,其 since 修改为 1.0.0,统一以 1.0.0 作为初始版本

fix plusone/plusone-commons#30
2025-03-28 11:35:12 +08:00
f5b04a7ae8 docs: 改正 PredicateTools 的 javadoc (#39)
Reviewed-on: plusone/plusone-commons#39
2025-03-28 10:39:56 +08:00
dde3d1d172 docs: 删除 IdWorker 的 author 信息
Reviewed-on: plusone/plusone-commons#37
2025-03-28 09:31:02 +08:00
e3d60ffe97 docs: 删除 IdWorker 的 author 信息
该工具来自 seata,并非本项目原创,写 javadoc 时忘记修改模板中的 author,而seata 源代码中早就删除了该类的 author 信息,故应先删除。

见:https://github.com/apache/incubator-seata/pull/6179

close plusone/plusone-commons#31
2025-03-28 09:22:55 +08:00
aadd1857de docs: 改正 OptionalTools 的 javadoc
Reviewed-on: plusone/plusone-commons#35
2025-03-28 09:08:23 +08:00
e98fe66b65 docs: fix javadoc
fix issue plusone/plusone-commons#29
2025-03-28 08:55:35 +08:00
32 changed files with 60 additions and 49 deletions

12
pom.xml
View File

@ -6,7 +6,7 @@
<groupId>xyz.zhouxy.plusone</groupId> <groupId>xyz.zhouxy.plusone</groupId>
<artifactId>plusone-commons</artifactId> <artifactId>plusone-commons</artifactId>
<version>1.0.0</version> <version>1.0.4</version>
<properties> <properties>
<!-- Basic properties --> <!-- Basic properties -->
@ -16,18 +16,18 @@
<maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.target>1.8</maven.compiler.target>
<!-- Versions of compile dependencies --> <!-- Versions of compile dependencies -->
<guava.version>33.4.0-jre</guava.version> <guava.version>33.4.2-jre</guava.version>
<joda-time.version>2.13.0</joda-time.version> <joda-time.version>2.14.0</joda-time.version>
<!-- Versions of test dependencies --> <!-- Versions of test dependencies -->
<commons-lang3.version>3.17.0</commons-lang3.version> <commons-lang3.version>3.17.0</commons-lang3.version>
<logback.version>1.2.13</logback.version> <logback.version>1.2.13</logback.version>
<junit.version>5.11.4</junit.version> <junit.version>5.12.1</junit.version>
<lombok.version>1.18.36</lombok.version> <lombok.version>1.18.36</lombok.version>
<hutool.version>5.8.35</hutool.version> <hutool.version>5.8.37</hutool.version>
<mybatis.version>3.5.19</mybatis.version> <mybatis.version>3.5.19</mybatis.version>
<h2.version>2.2.224</h2.version> <h2.version>2.2.224</h2.version>
<jackson.version>2.18.2</jackson.version> <jackson.version>2.18.3</jackson.version>
<gson.version>2.12.1</gson.version> <gson.version>2.12.1</gson.version>
</properties> </properties>

View File

@ -28,7 +28,7 @@ import java.lang.annotation.Target;
* 标识方法是读方法 getter * 标识方法是读方法 getter
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 1.0 * @since 1.0.0
* @see WriterMethod * @see WriterMethod
*/ */
@Target(ElementType.METHOD) @Target(ElementType.METHOD)

View File

@ -27,7 +27,7 @@ import java.lang.annotation.Target;
* <p>标识方法为静态工厂方法 * <p>标识方法为静态工厂方法
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)

View File

@ -29,7 +29,7 @@ import java.lang.annotation.Documented;
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @version 1.0 * @version 1.0
* @since 1.0 * @since 1.0.0
* @see UnsupportedOperationException * @see UnsupportedOperationException
*/ */
@Documented @Documented

View File

@ -26,7 +26,7 @@ import java.lang.annotation.Target;
* ValueObject - 值对象 * ValueObject - 值对象
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
@Inherited @Inherited
@Target(ElementType.TYPE) @Target(ElementType.TYPE)

View File

@ -26,7 +26,7 @@ import java.lang.annotation.Target;
* <p>该注解用于提醒强调父类虽然有默认实现但子类可以根据自己的需要覆写</p> * <p>该注解用于提醒强调父类虽然有默认实现但子类可以根据自己的需要覆写</p>
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)

View File

@ -28,7 +28,7 @@ import java.lang.annotation.Target;
* 标识方法是写方法 setter * 标识方法是写方法 setter
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 1.0 * @since 1.0.0
* @see ReaderMethod * @see ReaderMethod
*/ */
@Target(ElementType.METHOD) @Target(ElementType.METHOD)

View File

@ -34,7 +34,7 @@ import com.google.common.collect.Table;
* 集合工具类 * 集合工具类
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public class CollectionTools { public class CollectionTools {

View File

@ -20,7 +20,7 @@ package xyz.zhouxy.plusone.commons.exception;
* 数据不存在异常 * 数据不存在异常
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public final class DataNotExistsException extends Exception { public final class DataNotExistsException extends Exception {

View File

@ -29,7 +29,7 @@ import xyz.zhouxy.plusone.commons.base.IWithCode;
* 异常实现 {@link MultiTypesException} {@link #getType} 方法返回对应的场景类型 * 异常实现 {@link MultiTypesException} {@link #getType} 方法返回对应的场景类型
* </p> * </p>
* <p> * <p>
* 表示场景类型的枚举实现 {@link ExceptionType}其中的工厂方法用于创建类型对象 * 表示场景类型的枚举实现 {@link ExceptionType}其中的工厂方法用于创建对应类型的异常
* </p> * </p>
* *
* <pre> * <pre>

View File

@ -36,7 +36,7 @@ import xyz.zhouxy.plusone.commons.exception.MultiTypesException.ExceptionType;
* </p> * </p>
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public final class ParsingFailureException public final class ParsingFailureException
extends RuntimeException extends RuntimeException

View File

@ -27,7 +27,7 @@ package xyz.zhouxy.plusone.commons.exception.business;
* <b>NOTE: 通常表示业务中的意外情况用户错误输入缺失必填字段用户余额不足等</b> * <b>NOTE: 通常表示业务中的意外情况用户错误输入缺失必填字段用户余额不足等</b>
* </p> * </p>
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public class BizException extends RuntimeException { public class BizException extends RuntimeException {

View File

@ -32,7 +32,7 @@ import xyz.zhouxy.plusone.commons.exception.MultiTypesException;
* <b>NOTE: 属业务异常</b> * <b>NOTE: 属业务异常</b>
* </p> * </p>
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public final class InvalidInputException public final class InvalidInputException
extends RequestParamsException extends RequestParamsException

View File

@ -24,7 +24,7 @@ package xyz.zhouxy.plusone.commons.exception.business;
* </p> * </p>
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public class RequestParamsException extends BizException { public class RequestParamsException extends BizException {

View File

@ -29,7 +29,7 @@ package xyz.zhouxy.plusone.commons.exception.system;
* 后续需要排查原因 * 后续需要排查原因
* </p> * </p>
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public final class DataOperationResultException extends SysException { public final class DataOperationResultException extends SysException {

View File

@ -24,7 +24,7 @@ package xyz.zhouxy.plusone.commons.exception.system;
* </p> * </p>
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public class NoAvailableMacFoundException extends SysException { public class NoAvailableMacFoundException extends SysException {
private static final long serialVersionUID = 152827098461071551L; private static final long serialVersionUID = 152827098461071551L;

View File

@ -24,7 +24,7 @@ package xyz.zhouxy.plusone.commons.exception.system;
* </p> * </p>
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public class SysException extends RuntimeException { public class SysException extends RuntimeException {

View File

@ -26,7 +26,7 @@ import java.util.function.Supplier;
* 返回 {@code Optional&lt;T&gt;} 对象 * 返回 {@code Optional&lt;T&gt;} 对象
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
* @see Optional * @see Optional
* @see Supplier * @see Supplier
*/ */

View File

@ -19,14 +19,14 @@ package xyz.zhouxy.plusone.commons.function;
import java.util.function.Predicate; import java.util.function.Predicate;
/** /**
* Predicates * PredicateTools
* *
* <p> * <p>
* {@link Predicate} 相关操作 * {@link Predicate} 相关操作
* </p> * </p>
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
* @see Predicate * @see Predicate
*/ */
public class PredicateTools { public class PredicateTools {

View File

@ -16,6 +16,7 @@
package xyz.zhouxy.plusone.commons.function; package xyz.zhouxy.plusone.commons.function;
@FunctionalInterface
public interface ThrowingPredicate<T, E extends Throwable> { public interface ThrowingPredicate<T, E extends Throwable> {
/** /**

View File

@ -26,7 +26,7 @@ import java.util.function.BiFunction;
* 接受类型为 T U 的两个参数返回 {@code Optional&lt;R&gt;} 对象 * 接受类型为 T U 的两个参数返回 {@code Optional&lt;R&gt;} 对象
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
* @see Optional * @see Optional
* @see BiFunction * @see BiFunction
*/ */

View File

@ -26,7 +26,7 @@ import java.util.function.Function;
* 接受类型为 T 的参数返回 {@code Optional&lt;R&gt;} 对象 * 接受类型为 T 的参数返回 {@code Optional&lt;R&gt;} 对象
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
* @see Optional * @see Optional
* @see Function * @see Function
*/ */

View File

@ -39,7 +39,7 @@ import xyz.zhouxy.plusone.commons.util.StringTools;
* </p> * </p>
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 1.0 * @since 1.0.0
* @see xyz.zhouxy.plusone.commons.constant.PatternConsts#CHINESE_2ND_ID_CARD_NUMBER * @see xyz.zhouxy.plusone.commons.constant.PatternConsts#CHINESE_2ND_ID_CARD_NUMBER
*/ */
@ValueObject @ValueObject

View File

@ -30,7 +30,7 @@ import xyz.zhouxy.plusone.commons.util.AssertTools;
* 带校验的字符串值对象 * 带校验的字符串值对象
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public abstract class ValidatableStringRecord<T extends ValidatableStringRecord<T>> public abstract class ValidatableStringRecord<T extends ValidatableStringRecord<T>>
implements Comparable<T> { implements Comparable<T> {

View File

@ -37,7 +37,7 @@ import javax.annotation.Nullable;
* </p> * </p>
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public class ArrayTools { public class ArrayTools {

View File

@ -31,7 +31,7 @@ import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
* </p> * </p>
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
*/ */
public class BigDecimals { public class BigDecimals {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2023-2024 the original author or authors. * Copyright 2023-2025 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -184,7 +184,7 @@ public class DateTimeTools {
/** /**
* 使用指定时区 {@link LocalDateTime} 对象转换为 {@link Instant} 对象 * 使用指定时区 {@link LocalDateTime} 对象转换为 {@link Instant} 对象
* *
* @param LocalDateTime {@link LocalDateTime} 对象 * @param localDateTime {@link LocalDateTime} 对象
* @param zone 时区 * @param zone 时区
* @return {@link Instant} 对象 * @return {@link Instant} 对象
*/ */

View File

@ -42,7 +42,6 @@ import xyz.zhouxy.plusone.commons.exception.system.NoAvailableMacFoundException;
* <li><a href="https://juejin.cn/post/7265516484029743138">关于若干读者阅读改良版雪花算法后提出的几个共性问题的回复</a></li> * <li><a href="https://juejin.cn/post/7265516484029743138">关于若干读者阅读改良版雪花算法后提出的几个共性问题的回复</a></li>
* </ul> * </ul>
* </p> * </p>
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
*/ */
public class IdWorker { public class IdWorker {

View File

@ -26,13 +26,13 @@ import javax.annotation.Nullable;
import com.google.common.annotations.Beta; import com.google.common.annotations.Beta;
/** /**
* OptionalUtil * OptionalTools
* *
* <p> * <p>
* 提供一些 Optional 相关的方法 * 提供一些 Optional 相关的方法
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 0.1.0 * @since 1.0.0
* @see Optional * @see Optional
* @see OptionalInt * @see OptionalInt
* @see OptionalLong * @see OptionalLong

View File

@ -31,7 +31,7 @@ import javax.annotation.Nullable;
* TreeBuilder * TreeBuilder
* *
* @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a> * @author <a href="http://zhouxy.xyz:3000/ZhouXY108">ZhouXY</a>
* @since 1.0 * @since 1.0.0
*/ */
public class TreeBuilder<T, TSubTree extends T, TIdentity> { public class TreeBuilder<T, TSubTree extends T, TIdentity> {
private final Function<T, TIdentity> identityGetter; private final Function<T, TIdentity> identityGetter;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2024 the original author or authors. * Copyright 2024-2025 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -184,24 +184,34 @@ public class PagingAndSortingQueryParamsTests {
assertThrows(IllegalArgumentException.class, () -> queryParams.buildPagingParams()); // NOSONAR assertThrows(IllegalArgumentException.class, () -> queryParams.buildPagingParams()); // NOSONAR
} }
static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@Test @Test
void testGson() throws Exception { void testGson() {
Gson gson = new GsonBuilder() Gson gson = new GsonBuilder()
.registerTypeAdapter(LocalDate.class, new TypeAdapter<LocalDate>() { .registerTypeAdapter(LocalDate.class, new TypeAdapter<LocalDate>() {
@Override @Override
public void write(JsonWriter out, LocalDate value) throws IOException { public void write(JsonWriter out, LocalDate value) throws IOException {
out.value(dateFormatter.format(value)); out.value(DateTimeFormatter.ISO_DATE.format(value));
} }
@Override @Override
public LocalDate read(JsonReader in) throws IOException { public LocalDate read(JsonReader in) throws IOException {
return LocalDate.parse(in.nextString(), dateFormatter); return LocalDate.parse(in.nextString(), DateTimeFormatter.ISO_DATE);
} }
}) })
.registerTypeAdapter(LocalDateTime.class, new TypeAdapter<LocalDateTime>() {
@Override
public void write(JsonWriter out, LocalDateTime value) throws IOException {
out.value(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(value));
}
@Override
public LocalDateTime read(JsonReader in) throws IOException {
return LocalDateTime.parse(in.nextString(), DateTimeFormatter.ISO_LOCAL_DATE_TIME);
}
})
.create(); .create();
try (SqlSession session = sqlSessionFactory.openSession()) { try (SqlSession session = sqlSessionFactory.openSession()) {
AccountQueryParams params = gson.fromJson(JSON_STR, AccountQueryParams.class); AccountQueryParams params = gson.fromJson(JSON_STR, AccountQueryParams.class);
@ -212,6 +222,7 @@ public class PagingAndSortingQueryParamsTests {
List<AccountVO> list = accountQueries.queryAccountList(params, pagingParams); List<AccountVO> list = accountQueries.queryAccountList(params, pagingParams);
long count = accountQueries.countAccount(params); long count = accountQueries.countAccount(params);
PageResult<AccountVO> accountPageResult = PageResult.of(list, count); PageResult<AccountVO> accountPageResult = PageResult.of(list, count);
log.info(gson.toJson(accountPageResult)); log.info(gson.toJson(accountPageResult));
assertEquals(Lists.newArrayList( assertEquals(Lists.newArrayList(
@ -226,7 +237,7 @@ public class PagingAndSortingQueryParamsTests {
} }
AccountQueryParams queryParams = gson.fromJson(WRONG_JSON_STR, AccountQueryParams.class); AccountQueryParams queryParams = gson.fromJson(WRONG_JSON_STR, AccountQueryParams.class);
assertThrows(IllegalArgumentException.class, () -> queryParams.buildPagingParams()); // NOSONAR assertThrows(IllegalArgumentException.class, queryParams::buildPagingParams);
} }
} }

View File

@ -400,7 +400,7 @@ class DateTimeToolsTests {
// ================================ // ================================
// ================================ // ================================
// #region - ZondId <--> DateTimeZone // #region - ZoneId <--> DateTimeZone
// ================================ // ================================
@Test @Test
@ -412,7 +412,7 @@ class DateTimeToolsTests {
} }
// ================================ // ================================
// #endregion - ZondId <--> DateTimeZone // #endregion - ZoneId <--> DateTimeZone
// ================================ // ================================
// ================================ // ================================