我正在嘗試使用LocalTime.
LocalTime start = LocalTime.parse("00:00", DateTimeFormatter.ofPattern("HH:mm"));
LocalTime end = LocalTime.parse("23:59", DateTimeFormatter.ofPattern("HH:mm"));
但是,start.isBefore(end)回傳 true,這怎么可能?
我需要知道開始時間是否晚于或等于結束時間。
uj5u.com熱心網友回復:
您的問題與決議無關。
而且,您看到的行為是一項功能,而不是錯誤。
LocalTime表示單個虛構的通用 24 小時一天中的時間。那一天從 00:00:00.0 開始。所以所有其他值都在該零時間值之后。
所以這應該回傳true:
LocalTime.parse( "00:00" ).isBefore( LocalTime.parse( "23:59" ) ) // true.
請注意,在我們政治定義的計時系統中,日子不一定是 24 小時,也不一定從 00:00 開始。有些日子可能是 23、23.5、25 或其他小時數。某些時區中的某些日期可能從 01:00 等時間開始。
順便說一句,請注意,DateTimeFormatter當輸入符合 ISO 8601 日期時間文本值標準時,無需指定 a 。
uj5u.com熱心網友回復:
注意
- 現代日期時間 API 基于ISO 8601,
DateTimeFormatter只要日期時間字串符合 ISO 8601 標準,就不需要明確使用物件。您的時間字串采用 ISO 8601 格式。 - 本地時間,
00:00對應于12:00 AM而23:59對應于11:59 PM,很明顯00:00是在 之前23:59。所以,你得到的結果是正確的。
為避免混淆,我建議您附上當地時間的日期,即使用LocalDateTime.
演示:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
LocalTime start = LocalTime.parse("00:00");
LocalTime end = LocalTime.parse("23:59");
System.out.println(start.format(dtf));
System.out.println(end.format(dtf));
LocalDate today = LocalDate.now();
LocalDateTime ldtStart = start.atDate(today);
LocalDateTime ldtEnd = end.atDate(today);
System.out.println(ldtStart);
System.out.println(ldtEnd);
// Notice the result when you add a minute to ldtEnd
System.out.println(ldtEnd.plusMinutes(1));
}
}
輸出:
12:00 AM
11:59 PM
2021-10-30T00:00
2021-10-30T23:59
2021-10-31T00:00
ONLINE DEMO
從Trail: Date Time 中了解有關現代日期時間 API * 的更多資訊。
* 如果您正在為 Android 專案作業并且您的 Android API 級別仍然不符合 Java-8,請檢查通過 desugaring 可用的 Java 8 API。請注意,Android 8.0 Oreo 已提供對java.time.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/342525.html
上一篇:正確決議JObject
