From b079e509164719828c52eb497ad102af60e5b1c3 Mon Sep 17 00:00:00 2001 From: Glavo Date: Mon, 19 May 2025 11:06:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=AF=E5=8A=A8=E5=99=A8?= =?UTF-8?q?=E5=9C=A8=E9=83=A8=E5=88=86=20Linux=20=E5=8F=91=E8=A1=8C?= =?UTF-8?q?=E7=89=88=E4=B8=8A=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E7=94=A8=E6=88=B7=E5=9C=B0=E5=8C=BA=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#3921)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/ui/account/AccountListPage.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListPage.java index 21e6f3517..5b2d758c5 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListPage.java @@ -50,7 +50,7 @@ import org.jackhuang.hmcl.util.platform.windows.WinConstants; import java.net.URI; import java.time.ZoneId; -import java.time.ZonedDateTime; +import java.util.Arrays; import java.util.Locale; import static org.jackhuang.hmcl.setting.ConfigHolder.globalConfig; @@ -63,18 +63,27 @@ public final class AccountListPage extends DecoratorAnimatedPage implements Deco static final BooleanProperty RESTRICTED = new SimpleBooleanProperty(true); private static boolean isExemptedRegion() { - if ("Asia/Shanghai".equals(ZoneId.systemDefault().getId())) + String zoneId = ZoneId.systemDefault().getId(); + if (Arrays.asList( + "Asia/Shanghai", + // Although Asia/Beijing is not a legal name, Deepin uses it + "Asia/Beijing", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Harbin" + ).contains(zoneId)) return true; - if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS - && NativeUtils.USE_JNA - && ZonedDateTime.now().getOffset().getTotalSeconds() == 8 * 3600) { // GMT+8 + if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS && NativeUtils.USE_JNA) { Kernel32 kernel32 = Kernel32.INSTANCE; // https://learn.microsoft.com/windows/win32/intl/table-of-geographical-locations - if (kernel32 != null && kernel32.GetUserGeoID(WinConstants.GEOCLASS_NATION) == 45) + if (kernel32 != null && kernel32.GetUserGeoID(WinConstants.GEOCLASS_NATION) == 45) // China return true; - } + } else if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX && "GMT+08:00".equals(zoneId)) + // Some Linux distributions may use invalid time zone ids (e.g., Asia/Beijing) + // Java may not be able to resolve this name and use GMT+08:00 instead. + return true; return false; }