簡體   English   中英

java.sql.Time到OffsetTime

[英]java.sql.Time to OffsetTime

嗨,在DB中,我有四列來存儲一個時間窗口。 這將允許用戶存儲9:00至5:00 EST。

現在,我需要在Java中解析此信息。

java.sql.Time startTS = rs.getTime("begin_TIME ");
LocalTime localTime = startTS.toLocalTime();

可以使用以下方式進行偏移:OffsetTime of(LocalTime time,ZoneOffset offset)

從我所看到的,我們不能將zoneid轉換為zoneoffset,所以我如何將9:00 est(存儲在時間和區域列中)從sqlserver轉換為java。

DB Table:
 begin_TIME time NOT NULL,
 begin_TIME_ZONE varchar(5) NOT NULL,
 end_TIME time NOT NULL,
 end_TIME_ZONE varchar(5) NOT NULL,

在后端,我需要檢查請求是否在窗口中,請求時間已轉換為ZonedDateTime,並且開始和結束需要來自數據庫:

public boolean compare(ZonedDateTime dateTime, OffsetTime startTime, OffsetTime endTime) {
    OffsetTime offsetTime = dateTime.toOffsetDateTime().toOffsetTime();
    int start = offsetTime.compareTo(startTime);
    int end = offsetTime.compareTo(endTime);
    return start >= 0 && end <= 0;
}

如果我正確理解您的情況,那么您的compare方法的這種變體應該可以為您提供幫助:

public boolean compare(ZonedDateTime dateTime, LocalTime start, ZoneId startTz,
        LocalTime end, ZoneId endTz) {
    ZonedDateTime startZonedDateTime = start.atDate(dateTime.toLocalDate()).atZone(startTz);
    ZonedDateTime endZonedDateTime = end.atDate(dateTime.toLocalDate()).atZone(endTz);
    return (! dateTime.isBefore(startZonedDateTime)) && (! dateTime.isAfter(endZonedDateTime));
}

我正在使用提供的ZonedDateTime的日期部分來確定是否在生效夏令時的日期進行比較。 我之所以這樣選擇,是因為Java需要一個日期才能將本地時間轉換為時區可能具有夏令時的時間。

可以像在版本中那樣比較OffsetTime (忽略日期)對象,但是我發現比較ZonedDateTime對象稍微簡單一些。 它實際上所做的是比較相應的瞬間,因此即使時區不同,它也可以正常工作。

我相信您可以向該方法提供兩個區域ID對象。 如果最終在America/Toronto數據庫中將時區存儲為America/Toronto ,則可以將其直接輸入ZoneId.of()

我真的不認為您應該堅持ESTPST 它變得太復雜且容易出錯。 Java可以將EST轉換為-05:00 ; 這使您無需調整夏令時(盡管它確實將PST理解為America/Los_Angeles )。 使用現代形式的America/Toronto等。請參見以下問題的答案:如何使用Java中的Timezone解決夏時制

暫無
暫無

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

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