[英]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()
。
我真的不認為您應該堅持EST
和PST
。 它變得太復雜且容易出錯。 Java可以將EST
轉換為-05:00
; 這使您無需調整夏令時(盡管它確實將PST
理解為America/Los_Angeles
)。 使用現代形式的America/Toronto
等。請參見以下問題的答案:如何使用Java中的Timezone解決夏時制 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.