2017-03-13 47 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