簡體   English   中英

使用 Java 比較日期和時間范圍

[英]Compare Date and Time range with Java

我有這個輸入:

{
  "MONDAY" : "02:39:00"
}

這是需要比較的 DAY 和時間

  "availability" : {
    "SUNDAY" : {
      "from" : "00:00",
      "to" : "10:00"
    },
    "MONDAY" : {
      "from" : "00:00",
      "to" : "10:00"
    }
  }

比較availability實際上是否包含查詢02:39:00的時間在其中的 DAY 的最佳方法是什么。

因此,它可以用 Java 形式表示:

boolean isOpen = checkIfOpen("MONDAY", "02:39:00", availabilityJSONObject);

在這種情況下, isOpen的值為 true。

我將通過使用兩個地圖來解決這個問題,其中鍵為日期,時間為第一張地圖的值,時間為第二張地圖的值。

並檢查時間是否介於此時間之間。

您可以使用 gson 將 json 轉換為 java 對象。

正如 Pranav balu 已經說過的那樣,為您的數據使用 Java 對象/數據結構。 使用 Jackson 或 Gson 等 JSON 庫將您的 JSON 輸入轉換為 Java 類型。 對於每日可用性范圍,您將需要一個 Java 類型。 例如:

public class AvailabilityRange {

    LocalTime opens;
    LocalTime closes;
    
    public AvailabilityRange(String from, String to) {
        opens = LocalTime.parse(from);
        closes = LocalTime.parse(to);
    }
    
    public boolean inRange(String timeString) {
        LocalTime time = LocalTime.parse(timeString);
        return (! time.isBefore(opens)) && time.isBefore(closes);
    }
}

我提供了一個方便的構造函數和一個接受String參數的方便的方法。 您可能需要一個構造函數和一個接受LocalTime的方法,或兩者​​兼而有之。

使用示例:

        Map<DayOfWeek, AvailabilityRange> availability
                = new EnumMap<DayOfWeek, AvailabilityRange>(
                        Map.of(DayOfWeek.SUNDAY, new AvailabilityRange("00:00", "10:00"), 
                                DayOfWeek.MONDAY, new AvailabilityRange("00:00", "10:00")));
        
        String dayString = "MONDAY";
        String timeString = "02:39:00";
        
        boolean isOpen;
        AvailabilityRange availabilityForDay
                = availability.get(DayOfWeek.valueOf(dayString));
        if (availabilityForDay == null) {
            isOpen = false;
        } else {
            isOpen = availabilityForDay.inRange(timeString);
        }
        
        System.out.println("Is open? " + isOpen);

輸出:

開了? 真的

我正在利用您的時間字符串采用 ISO 8601 格式這一事實, LocalTime將此格式解析為默認格式,即沒有任何顯式格式化程序。 秒在格式中是可選的,因此00:0002:39:00都被解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM