gpt4 book ai didi

java - 日期午夜问题

转载 作者:行者123 更新时间:2023-12-02 13:36:04 26 4
gpt4 key购买 nike

我正在尝试比较同一天的两个日期。

第一个格式为 date1 = Fri Mar 24 00:00:00 CET 2017第二个是 date2 = 2017-03-24 09:59:39.0

date1 是从 UI 中检索的。

date2 在数据库中注册为日期时间

问题是在比较两个日期时,使用 java.sql 包的 Timestamp 类的以下方法时,我总是得到值 1

date2.compareTo(date1); 

public int compareTo(Timestamp ts) {
long thisTime = this.getTime();
long anotherTime = ts.getTime();
int i = (thisTime<anotherTime ? -1 :(thisTime==anotherTime?0 :1));
if (i == 0) {
if (nanos > ts.nanos) {
return 1;
} else if (nanos < ts.nanos) {
return -1;
}
}
return i;

}

我正在研究如何将 date1 转换为今天的日期(包含午夜时间),以便将 0 作为返回值。

最佳答案

如果可以,请使用 Java 8 日期和时间类。很久以前我就和JSF一起工作了(你原来的问题中提到了JavaServer Faces,有人把它编辑掉了),我相信它现在可以给你一个LocalDate 。现代 JDBC 版本应该能够为您提供数据库中的时间戳,如 LocalDateTimeOffsetDateTime 。其中每一个都有一个 toLocalDate方法会给你 LocalDate您可以将其与用户提供的进行比较。一个LocalDate没有时间成分,所以你所有的问题都会得到解决。它实现了Comparable<LocalTime> 。您可以选择使用 compareTo(LocalTime) , isBefore(LocalTime)isAfter(LocalTime) 。当然equals()也按预期工作。

如果从您的数据库或用户界面,您只能获得老式的 Date对象,转换方法如下:

    LocalDate dateWithoutTime = yourDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

我假设可以使用计算机的时区设置,即 ZoneId.systemDefault()会给你。如果没有,请提供正确的时区,例如 ZoneId.of("Europe/Paris")六级考试。

如果你根本无法使用Java 8,当然仍然可以完成。查看 Ronald van der List 提供的链接。如果您最终想要使用第三方库,他们说您应该更喜欢 ThreeTen Backport 而不是 JodaTime(我对这两个库都没有经验)。

ThreeTen Backport 主页链接:http://www.threeten.org/threetenbp/ .

关于java - 日期午夜问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42997032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com