Java IST(印度标准时间)的LocalDateTime,区域偏移更干净

Java IST(印度标准时间)的LocalDateTime,区域偏移更干净,java,java-time,Java,Java Time,这里我明确计算了区域偏移量,印度为5h30m。然后转换为秒,用于获取以毫秒为单位的本地时间。 如果我不必计算时间偏移量,但某些枚举等会选择偏移量,那么有没有更好的方法来实现这一点?即时从一开始就不合适,真的。秒(如时钟中的秒位,去掉了分钟等)是人类的时间概念Instant代表计算机时间,LocalDate、ZoneDateTime等代表人类,他们疯狂地玩弄时区、闰年、闰秒、俄罗斯革命和日历,以及与天文无关、毫无根据的概念,如周。人类会疯的 private static int gmtOffet

这里我明确计算了区域偏移量,印度为5h30m。然后转换为秒,用于获取以毫秒为单位的本地时间。
如果我不必计算时间偏移量,但某些枚举等会选择偏移量,那么有没有更好的方法来实现这一点?

即时从一开始就不合适,真的。秒(如时钟中的秒位,去掉了分钟等)是人类的时间概念
Instant
代表计算机时间,
LocalDate
ZoneDateTime
等代表人类,他们疯狂地玩弄时区、闰年、闰秒、俄罗斯革命和日历,以及与天文无关、毫无根据的概念,如周。人类会疯的

private static int gmtOffet = 19800;

public long convertToLong(LocalDateTime localDateTime) {
    return localDateTime.toInstant(ZoneOffset.ofTotalSeconds(gmtOffet)).toEpochMilli();
}

等等。

事实上,一开始瞬间并不合适。秒(如时钟中的秒位,去掉了分钟等)是人类的时间概念
Instant
代表计算机时间,
LocalDate
ZoneDateTime
等代表人类,他们疯狂地玩弄时区、闰年、闰秒、俄罗斯革命和日历,以及与天文无关、毫无根据的概念,如周。人类会疯的

private static int gmtOffet = 19800;

public long convertToLong(LocalDateTime localDateTime) {
    return localDateTime.toInstant(ZoneOffset.ofTotalSeconds(gmtOffet)).toEpochMilli();
}

等等。

如果从纪元开始需要毫秒,最实用的方法是像您这样从
即时
获取它们

关于偏移量,从库中获取更干净、更好:

ZoneId INDIA_ZONE = ZoneId.of("Asia/Kolkata");
ZonedDateTime zdt = yourLDT.atZone(INDIA_ZONE);
int seconds = zdt.getSecond();
这说明了使用当前偏移量的原因。这也是历史日期(印度并不总是使用偏移量+05:30)和未来日期的证明,以防印度政客在未来某个时间决定不同的偏移量


您可能会再次问自己是否真的需要该毫秒值?这是低级的。最好将时间中的某个时刻表示为
Instant
对象或其他日期和时间对象。当然,如果是针对您无法控制的遗留API,您别无选择。

如果您需要从纪元开始的毫秒数,最实用的方法是像您这样从
即时
获取它们

关于偏移量,从库中获取更干净、更好:

ZoneId INDIA_ZONE = ZoneId.of("Asia/Kolkata");
ZonedDateTime zdt = yourLDT.atZone(INDIA_ZONE);
int seconds = zdt.getSecond();
这说明了使用当前偏移量的原因。这也是历史日期(印度并不总是使用偏移量+05:30)和未来日期的证明,以防印度政客在未来某个时间决定不同的偏移量

您可能会再次问自己是否真的需要该毫秒值?这是低级的。最好将时间中的某个时刻表示为
Instant
对象或其他日期和时间对象。当然,如果是针对您无法控制的遗留API,那么您别无选择