2 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
從問(wèn)題評(píng)論中的討論中,我了解到您正在使用航班時(shí)刻表-即將來(lái)要起飛的時(shí)間。實(shí)際上,這是當(dāng)?shù)貢r(shí)間比UTC時(shí)間重要的情況。
由于您擁有當(dāng)?shù)氐某霭l(fā)時(shí)間和地點(diǎn)(例如:鹽湖城的5:00 PM),因此您應(yīng)該在計(jì)劃的出發(fā)時(shí)間數(shù)據(jù)庫(kù)中存儲(chǔ)兩個(gè)值:
17:00
-出發(fā)當(dāng)?shù)貢r(shí)間SLC
-與時(shí)間相關(guān)的位置
如果這是這次航班的特定情況,那么您還應(yīng)該存儲(chǔ)日期:
2018-06-01T17:00
-具體的當(dāng)?shù)叵嚓P(guān)出發(fā)時(shí)間SLC
-與當(dāng)?shù)貢r(shí)間有關(guān)的位置
這些是與業(yè)務(wù)用例上下文相關(guān)的詳細(xì)信息。不要通過(guò)將它們轉(zhuǎn)換為UTC來(lái)忽視它們。
就是說(shuō),您可以考慮將它們存儲(chǔ)為DateTimeOffset
(2018-06-01T17:00-06:00
),這對(duì)于給定的實(shí)例而言轉(zhuǎn)換為UTC并不重要。但是,此方法存在兩個(gè)問(wèn)題:
由于偏移量可能會(huì)更改,因此無(wú)法重復(fù)使用。
即使對(duì)于單個(gè)實(shí)例,偏移量也可能會(huì)發(fā)生變化-如果控制時(shí)區(qū)的政府決定在發(fā)生這種情況之前更改標(biāo)準(zhǔn)偏移量或夏令時(shí)規(guī)則。如果您采用一種
DateTimeOffset
方法或基于UTC的方法,則必須準(zhǔn)備面對(duì)此類(lèi)變化重新計(jì)算未來(lái)的事件。(有關(guān)此內(nèi)容的更多信息,請(qǐng)參閱我的博客文章:關(guān)于埃及時(shí)區(qū)變化的時(shí)機(jī)和不可避免的時(shí)區(qū)混亂。還有無(wú)數(shù)其他示例。)
關(guān)于位置-因?yàn)槟谑褂玫纳舷挛臄?shù)據(jù)適用于航空業(yè),所以我建議使用SLC
上面顯示的IATA機(jī)場(chǎng)代碼。在其他情況下,可能會(huì)存儲(chǔ)IANA時(shí)區(qū)標(biāo)識(shí)符(例如America/Denver
)或Windows時(shí)區(qū)標(biāo)識(shí)符(例如)Mountain Standard Time
。
您可能會(huì)發(fā)現(xiàn)我的“機(jī)場(chǎng)時(shí)區(qū)”要點(diǎn)(代碼和輸出表)對(duì)于使用IATA機(jī)場(chǎng)代碼非常有用。您必須決定這些數(shù)據(jù)將如何在您的系統(tǒng)中流動(dòng)。如果您在Windows上運(yùn)行,并且想使用TimeZoneInfo
該類(lèi)將時(shí)間轉(zhuǎn)換為不同的時(shí)區(qū),請(qǐng)使用此處顯示的Windows時(shí)區(qū)ID。如果要使用IANA時(shí)區(qū)ID,請(qǐng)考慮使用Noda Time,也可以使用我的TimeZoneConverter庫(kù)。這里有幾種不同的選項(xiàng),因此請(qǐng)仔細(xì)研究所有選項(xiàng),然后選擇對(duì)您有意義的選項(xiàng)。
恕我直言,野田時(shí)間將是一個(gè)不錯(cuò)的選擇。您不僅會(huì)獲得出色的時(shí)區(qū)支持,而且還能夠使用類(lèi)似LocalTime
或LocalDateTime
與所描述的場(chǎng)景非常吻合的類(lèi)型。
- 2 回答
- 0 關(guān)注
- 386 瀏覽
添加回答
舉報(bào)