簡體   English   中英

時區和夏時制問題

[英]Timezone and Daylight Savings Issues

我已經瀏覽了SO上的其他解決方案,但它們似乎都沒有在以下方面解決時區/ dst問題。

我正在撥打NOAA潮汐預報APINOAA國家氣象服務API的電話 ,這些API需要傳遞時間范圍才能檢索數據。 對於數據庫中的每個位置,我都有時區作為UTC偏移量,以及是否觀察到夏令時(1或0)。 我正在嘗試將某些日期(今天和明天)格式化為LST(本地標准時間)在其自己的時區中的格式,以便我可以傳遞給這些API。

我在弄清楚如何知道某個日期(例如今天)是否在夏令時范圍內時遇到了麻煩。

這是我到目前為止的內容:

// Get name of timezone for tide station
// NOTE: $locationdata->timezone is something like "-5"
$tz_name = timezone_name_from_abbr("", $locationdata->timezone * 3600, false);
$dtz = new DateTimeZone($tz_name);    

// Create time range
$start_time = new DateTime('', $dtz);
$end_time = new DateTime('', $dtz);
$end_time = $end_time->modify('+1 day');

// Modify time to match local timezone
$start_time->setTimezone($dtz);
$end_time->setTimezone($dtz);

// Adjust for daylight savings time
if( $locationdata->dst == '1' )
{
   // DST is observed in this area. 

   // ** HOW DO I KNOW IF TODAY IS CURRENTLY DST OR NOT? **  

}           

// Make call to API using modified time range
...

我該怎么做呢? 謝謝。

您可以使用PHP的時間和日期函數:

$tzObj = timezone_open($tz_name);
$dateObj = date_create("07.03.2012 10:10:10", $tzObj);

$dst_active = date_format($dateObj, "I");

如果DST在給定日期處於活動狀態,則$dst_active1 ,否則為0

除了在對date_create的調用中指定時間date_create您還可以傳遞"now"以接收當前日期和時間的值。

但是,就像喬恩提到的那樣,在相同時區偏移量內的不同國家/地區可能會遵守夏令時,而其他國家可能不會。

對於數據庫中的每個位置,我都有時區作為UTC偏移量,以及是否觀察到夏令時(1或0)。

信息不足。 可能存在多個時區,所有時區都具有相同的標准偏移,都遵守DST,但在不同時間執行DST轉換。 (實際上,從歷史上看,它們可能也開始和停止了幾年的夏時制。)

基本上,您的數據庫包含時區ID,而不應包含offset / DST-true-或-false。 (假設PHP使用zoneinfo時區數據庫,則時區ID類似於“歐洲/倫敦”。)

編輯:要查找給定DateTime的偏移量,可以調用getOffset ,然后可以將其與標准時間偏移量進行比較。 但是,除非您具有確定的時區ID,否則您冒獲得錯誤時區的風險。

Cillosis,希望您不使用Java! 我一直在和時間斗爭。 我也處理天氣數據。 我使用的大多數數據都以當地標准時間顯示(忽略夏令時)。 我還需要使用其他時區的時間,並且發現Java一直在讀取計算機的時區。 我也一直遇到過時的類。 我想出了一個可行的解決方案。 它有點混亂,所以我有大量文獻記錄,它僅存在於一個函數中。 我的解決方案是相對時間。 我已將當地時間設置為UTC。 我減去GMT偏移量而不是添加它。 我並不在乎實際時間,我所關心的只是兩次之間的時差。 運行良好。 祝好運

暫無
暫無

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

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