
spring.turbo.util.time.ZoneIdUtils Maven / Gradle / Ivy
package spring.turbo.util.time;
import org.springframework.lang.Nullable;
import java.time.DateTimeException;
import java.time.ZoneId;
import java.util.Objects;
import java.util.regex.Pattern;
import static spring.turbo.util.StringUtils.isBlank;
/**
* {@link ZoneId} 相关工具
*
* @author 应卓
* @see ZoneId#getAvailableZoneIds()
* @since 1.1.3
*/
public final class ZoneIdUtils {
// SYSTEM
public static final ZoneId SYSTEM_DEFAULT = ZoneId.systemDefault();
// UTC
public static final String EUROPE_LONDON_VALUE = "Europe/London";
public static final ZoneId EUROPE_LONDON = ZoneId.of(EUROPE_LONDON_VALUE);
// 中国
public static final String ASIA_SHANGHAI_VALUE = "Asia/Shanghai";
public static final ZoneId ASIA_SHANGHAI = ZoneId.of(ASIA_SHANGHAI_VALUE);
// 美国
public static final String AMERICA_CHICAGO_VALUE = "America/Chicago";
public static final ZoneId AMERICA_CHICAGO = ZoneId.of(AMERICA_CHICAGO_VALUE);
// 日本
public static final String ASIA_TOKYO_VALUE = "Asia/Tokyo";
public static final ZoneId ASIA_TOKYO = ZoneId.of(ASIA_TOKYO_VALUE);
/**
* 私有构造方法
*/
private ZoneIdUtils() {
}
public static ZoneId toZoneIdOrSystemDefault(@Nullable String name) {
var id = toZoneIdOrDefault(name, SYSTEM_DEFAULT);
return Objects.requireNonNull(id);
}
@Nullable
public static ZoneId toZoneIdOrDefault(@Nullable String name, @Nullable ZoneId defaultIfNullOrError) {
if (isBlank(name)) {
return defaultIfNullOrError;
}
try {
return ZoneId.of(name);
} catch (DateTimeException e) {
var matcher = Pattern.compile("^([a-zA-Z]+[+-]\\d+)\\.0+$").matcher(name);
if (matcher.matches()) {
name = matcher.replaceAll("$1");
try {
return ZoneId.of(name);
} catch (Throwable ex) {
return defaultIfNullOrError;
}
} else {
return defaultIfNullOrError;
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy