[英]Comparing java.sql.timestamp values
對於Timestamp
值,如何比較 <= 或 >=,因為我們可以使用現有的
myTs.before(someTs)
但這在內部檢查<
不<=
我需要基本上檢查myTs <= someTs1 and myTs>=someTs1
我們如何比較 <= 或 >= 以及我們如何從時間戳中獲取紀元秒數?
Timestamp class 的compareTo()方法返回:
Integer 值 0 如果此時間戳 object 等於給定時間戳
如果此時間戳 object 在給定參數之前,則值小於 0
如果此時間戳 object 在給定參數之后,則值大於 0
ts1.compareTo(ts2) >= 0
如果它不檢查相等性,則可以使用 not of after。 所以:
!myTs.after(someTs)
或者,您可以獲得時間戳的時間並進行比較。
myTs.getTime() >= someTs.getTime()
您可以將否定運算符 ( !
) 與.before
和.after
一起使用,如下所示:
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2021, 0, 10);// 10-Jan-2021
Date datePast = calendar.getTime();
Timestamp tsPast = new Timestamp(datePast.getTime());
Date dateNow = new Date();
Timestamp tsNow = new Timestamp(dateNow.getTime());
// Check <=
if (!tsNow.after(tsPast)) {
System.out.println("Now or before");
} else {
System.out.println("After");
}
// Check >=
if (!tsNow.before(tsPast)) {
System.out.println("Now or after");
} else {
System.out.println("Before");
}
}
}
Output:
After
Now or after
java.util 的日期時間java.util
及其格式 API, SimpleDateFormat
已過時且容易出錯。 建議完全停止使用它們並切換到現代日期時間 API 。 java.sql.Timestamp
extends java.util.Date
,它繼承了同樣的問題。 出於任何原因,如果您必須堅持使用 Java 6 或 Java 7,您可以使用ThreeTen-Backport ,它將大部分java.time功能反向移植到 Java 6 和 7。
您可以使用Timestamp#toInstant()
切換到現代日期時間 API。擁有Instant
后,您可以將其轉換為其他java.time
類型。
演示:
import java.sql.Timestamp;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2021, 0, 10);// 10-Jan-2021
Date datePast = calendar.getTime();
Timestamp tsPast = new Timestamp(datePast.getTime());
ZonedDateTime zdtPast = tsPast.toInstant().atZone(ZoneId.of("Europe/London"));
Date dateNow = new Date();
Timestamp tsNow = new Timestamp(dateNow.getTime());
ZonedDateTime zdtNow = tsNow.toInstant().atZone(ZoneId.of("Europe/London"));
// Check <=
if (!zdtNow.isAfter(zdtPast.minusMinutes(5))) {
System.out.println("Now or before");
} else {
System.out.println("After");
}
// Check >=
if (!zdtNow.isBefore(zdtPast)) {
System.out.println("Now or after");
} else {
System.out.println("Before");
}
}
}
Output:
After
Now or after
這兩個時間戳甚至可以相差幾分之一秒(即可以在之前或之后)。 然而,對於大多數實際場景,這不是我們想要的,例如業務需求可以 state 如果過去的日期時間小於當前日期時間的 5 分鍾,則應該以這種方式或那種方式進行處理。 現代日期時間 API 使得添加/減去時間單位變得非常容易,例如您可以執行以下操作:
if (!zdtNow.isAfter(zdtPast.minusMinutes(5))) {
//...
} else {
//...
}
從Trail:Date Time了解有關現代日期時間 API 的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.