Java 这会给我用户的正确本地时间吗?

Java 这会给我用户的正确本地时间吗?,java,datetime,time,dayofweek,localtime,Java,Datetime,Time,Dayofweek,Localtime,我需要找到一种方法来可靠地获取用户的本地时间。经过研究,一个潜在的解决方案可能是: 用户所在位置的星期几: int dayOfWeek = ZonedDateTime.now(Clock.systemDefaultZone()).getDayOfWeek().ordinal(); LocalDateTime.now(Clock.systemDefaultZone())); 用户所在位置的实际时间: int dayOfWeek = ZonedDateTime.now(Clock.systemD

我需要找到一种方法来可靠地获取用户的本地时间。经过研究,一个潜在的解决方案可能是:

用户所在位置的星期几:

int dayOfWeek = ZonedDateTime.now(Clock.systemDefaultZone()).getDayOfWeek().ordinal();
LocalDateTime.now(Clock.systemDefaultZone()));
用户所在位置的实际时间:

int dayOfWeek = ZonedDateTime.now(Clock.systemDefaultZone()).getDayOfWeek().ordinal();
LocalDateTime.now(Clock.systemDefaultZone()));

这些都对吗?我使用Clock.systemDefaultZone()正确吗?如果是这样,我想知道
Clock.systemDefaultZone()
是如何神奇地找出正确的时区的?

请注意,在第一个示例中,您不需要
ZoneDateTime
,因为您只关心一周中的某一天,而不关心当天的时间。还要注意,
LocalDate.now()
使用系统默认时钟,您不需要显式指定它

关于该默认时钟,
clock.systemDefaultZone()
基于系统默认时区,该时区通过查询:

获取Java虚拟机的默认时区。如果缓存的默认时区可用,则返回其克隆。否则,该方法将采取以下步骤来确定默认时区

  • 使用user.timezone属性值作为默认时区ID(如果可用)
  • 检测平台时区ID。平台时区的来源和ID映射可能因实现而异
  • 如果给定或检测到的时区ID未知,则使用GMT作为最后手段。 缓存根据ID创建的默认时区,并返回其克隆。user.timezone属性值在返回时设置为ID

请注意,在第一个示例中,您不需要使用
ZoneDateTime
LocalDate
,因为您只关心一周中的某一天,而不关心该天的时间。还要注意,
LocalDate.now()
使用系统默认时钟,您不需要显式指定它

关于该默认时钟,
clock.systemDefaultZone()
基于系统默认时区,该时区通过查询:

获取Java虚拟机的默认时区。如果缓存的默认时区可用,则返回其克隆。否则,该方法将采取以下步骤来确定默认时区

  • 使用user.timezone属性值作为默认时区ID(如果可用)
  • 检测平台时区ID。平台时区的来源和ID映射可能因实现而异
  • 如果给定或检测到的时区ID未知,则使用GMT作为最后手段。 缓存根据ID创建的默认时区,并返回其克隆。user.timezone属性值在返回时设置为ID

就这么简单:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class Main {
    public static void main(String[] args) {
        // Local date
        LocalDate today = LocalDate.now();
        System.out.println(today);

        // Local time
        LocalTime now = LocalTime.now();
        System.out.println(now);

        // Local date and time
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);

        // Day of week
        DayOfWeek dayOfWeek = today.getDayOfWeek();
        System.out.println(dayOfWeek);
        System.out.println(dayOfWeek.getValue());
    }
}
我的时区的输出:

2020-10-03
17:47:57.426833
2020-10-03T17:47:57.426943
SATURDAY
6

就这么简单:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class Main {
    public static void main(String[] args) {
        // Local date
        LocalDate today = LocalDate.now();
        System.out.println(today);

        // Local time
        LocalTime now = LocalTime.now();
        System.out.println(now);

        // Local date and time
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);

        // Day of week
        DayOfWeek dayOfWeek = today.getDayOfWeek();
        System.out.println(dayOfWeek);
        System.out.println(dayOfWeek.getValue());
    }
}
我的时区的输出:

2020-10-03
17:47:57.426833
2020-10-03T17:47:57.426943
SATURDAY
6

您在问题中写道:我想知道
Clock.systemDefaultZone()
如何神奇地计算出正确的时区?你有没有在课堂上查看方法
systemDefaultZone()
的源代码
Clock
?你对一周中的天数有什么特殊要求吗?通常,人们不应该使用
ordninal()
,而应该使用
getValue()
(对于从1=周一到7=周日的ISO日)或精心选择的
WeekFields
对象作为其他编号。您在问题中写道:我想知道
Clock.systemDefaultZone()
是如何神奇地计算出正确的时区的?你有没有在课堂上查看方法
systemDefaultZone()
的源代码
Clock
?你对一周中的天数有什么特殊要求吗?通常不应使用
ordninal()
,而应使用
getValue()
(适用于从1=周一到7=周日的ISO日)或精心选择的
WeekFields
对象作为其他编号。它是
Clock.systemDefaultZone()
内部调用的
LocalDateTime
。什么时候可以使用分区日期时间。。。使用执行它的JVM的时区…它相当于
LocalDate.now(ZoneId.systemDefault())
。每当您需要处理与JVM时区不同的时区中的日期时间时,都需要使用ZonedDateTime。如果有任何进一步的疑问,请随时发表评论。我实际上希望该代码适用于服务从中获得请求的任何用户(即,如果用户以GB为单位,则时间应为GB本地时间,如果用户在东海岸,则时间应为美国东部时间)。简单的LocalDateTime有效吗?@no\u-clue\u-so-检查@no\u-clue\u-so-我希望解决方案对您有效。不要忘记将答案标记为已接受,以便将来的访问者也可以自信地使用该解决方案。在
LocalDateTime
内部调用的是
Clock.systemDefaultZone()
。什么时候可以使用分区日期时间。。。使用执行它的JVM的时区…它相当于
LocalDate.now(ZoneId.systemDefault())
。每当您需要处理与JVM时区不同的时区中的日期时间时,都需要使用ZonedDateTime。如果有任何进一步的疑问,请随时发表评论。我实际上希望该代码适用于服务从中获得请求的任何用户(即,如果用户以GB为单位,则时间应为GB本地时间,如果用户在东海岸,则时间应为美国东部时间)。简单的LocalDateTime有效吗?@no\u-clue\u-so-检查@no\u-clue\u-so-我希望解决方案对您有效。不要忘记将答案标记为已接受,以便将来的访问者也可以自信地使用该解决方案。是否在LocalDate内内部调用了Clock.systemDefaultZone()?何时使用ZoneDateTime?请参阅我的编辑。如果您需要特定时区中的时间,请使用ZoneDateTime。在本例中,您只需要日期。是否在LocalDate内内部调用了Clock.systemDefaultZone()?何时使用ZoneDateTime?请参阅我的编辑。使用分区数据