2017-03-13 49 views
-2

我有運行DOS(FREEDOS 1.1)的計算機和滑動C(編譯與Borland 5.0)與time.h。當我使用BIOS或DATETIME DOS設置計算機的時間命令,沒有關於時區信息。我將時間設定在當前時間10:25 AM。如何設置(或正確)時區和夏令時在C(time.h中的功能)和DOS

我的C程序做到這一點...

char timeString[80]; 
time_t timeT = time(NULL); 
strftime(timeString, sizeof(timeString), "%a %Y-%m-%d %H:%M:%S %Z", localtime(&timeT)); 
printf("%s\n", timeString); 
當我運行的代碼,我得到正確的當前時間,但與年底「EST」的時區由 %Z格式化爲稱爲

星期一2017年3月13日10時25分36秒EST

返回從time(NULL)time_t值是1489418736.
這個數學分解至47歲,83天,15小時,25分鐘,36秒
顯然time.h在這裏實現了一些時區信息,增加5小時我的當前時間。

移動到JavaScript代碼在接收time_t

new Date(1489418736 * 1000) 

星期一2017年3月13日8時25分36秒GMT-0700(太平洋夏令時)

似乎有時間段的一些組合(東部時間vs太平洋時間vs格林威治標準時間)和夏令時(可能佔用額外一小時?)。如何影響機器,操作系統或C庫表示的時區和DST設置,以獲得最有用的時間表示,無論是本地還是GMT?

+0

不清楚你要求什麼。如果這是關於某些DOS命令的話,那麼這裏就不重要了。對於編程,請提供[mcve]並描述您的具體問題。基本問題可能是:「DOS是否支持時區?」 – Olaf

+0

我很好奇爲什麼你有一臺DOS機器。最後的DOS版本是16年前。可以肯定的是過去的一次爆炸。 – Amy

+0

我改變了標題以更好地反映被問到的問題(已經是帖子的最後一句話)。爲什麼我使用DOS,因爲這是我分配的項目。爲什麼這個問題還不清楚,因爲我完全不清楚它在哪個層次實現,無論是機器,操作系統,C庫還是僅僅使用它。 – robisrob

回答

0

它已經很多年了,但我覺得有一個DOS環境變量,C相對於確定的時區。如果沒有找到環境變量,C可能會默認爲EST。我不能說這個問題的javascript方面。

0

關於日光的問題,代碼將有麻煩。在美國,「我的當前時間10:25 AM應該是‘星期一2017年3月13日10時25分36秒EDT’(EDT VS EST)。古雅的TURBOC代碼肯定是要和演進DST規則的煩惱是已經不同過去的幾十年。

IMO,任何使用TURBOC localtime()mktime()的,struct tm.isdst_daylight將有關日光節約時間和可能,都產生了令人滿意的結果是時區問題的無盡源泉。無論是用現代的編譯器/庫或進口/推出自己的(啊)時區/日光程序

替代,堅持time_t和通用時間 - 沒有當地時間

+0

也許我的問題太過複雜以至於得不到這個,但即使time_t值似乎也受到影響,除了在DOS中設置的時間之外還有5個小時。我想我應該從中減去5個小時,並稱之爲一天,因爲你說我可能無法真正解決它。 – robisrob

+0

正如其他人所評論的那樣,「DOS」時間感通常是「本地時間」,轉換成通用取決於瞭解時區和DST設置。由於計算機不那麼流動,時區合理不變。不幸的是,DST轉變,或者不是,通常是按照算法設置的(根據一些固定的規則),並且該規則不適合零星的[更新](https://en.wikipedia.org/wiki/Daylight_saving_time_in_the_United_States#Extension_of_daylight_saving_time_.281975。 E2.80.931986.29)。祝你好運。 – chux