2017-03-13 4 views
-2

J'ai un ordinateur fonctionnant sous DOS (freeDos 1.1) et C simple (compilé avec Borland 5.0) avec time.h. Lorsque je règle l'heure de l'ordinateur à l'aide du BIOS ou des commandes DOS DATE et TIME, il n'y a pas d'informations sur le fuseau horaire. Je fixe l'heure à mon heure actuelle 10h25.Comment régler (ou corriger pour) fuseau horaire & DST dans c (fonctions time.h) et DOS

Mon programme C fait cela ...

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); 

quand je lance le code que je reçois l'heure actuelle correcte mais avec un fuseau horaire « EST » à la fin comme appelé par le formatter %Z.

Mon 13/03/2017 10:25:36 EST

La valeur retournée time_t de time(NULL) est 1489418736.
Cela tombe mathématiquement jusqu'à 47 ans, 83 jours, 15 heures, 25 minutes, 36 secondes
Clairement time.h met en œuvre des informations de fuseau horaire ici, en ajoutant 5 heures à mon heure actuelle.

Le passage à javascript qui reçoit la valeur time_t

new Date(1489418736 * 1000) 

Lun 13 mars 2017 08:25:36 GMT-0700 (heure avancée du Pacifique)

Il semble qu'il y ait une combinaison de fuseau horaire (EST vs PST vs GMT) et l'heure d'été (qui pourrait expliquer l'heure supplémentaire?) En jeu ici. Comment puis-je modifier les paramètres de fuseau horaire et d'heure d'été de la machine, du système d'exploitation ou de la représentation de la bibliothèque C, afin d'obtenir la représentation horaire la plus utile que ce soit locale ou GMT?

+0

Pas clair ce que vous demandez. S'il s'agit d'une commande DOS, c'est hors sujet ici. Pour la programmation, fournissez un [mcve] et décrivez votre problème spécifique. La question de base pourrait être: "DOS prend-il en charge les fuseaux horaires?" – Olaf

+0

Je suis curieux de savoir pourquoi vous avez une machine DOS. La dernière version DOS date d'il y a 16 ans. Une explosion du passé, pour être sûr. – Amy

+0

J'ai changé le titre pour mieux refléter la question posée (c'était déjà la dernière phrase du post). Pourquoi j'utilise DOS, parce que c'est le projet auquel je suis assigné. Pourquoi la question n'est pas claire, parce que je ne comprends pas vraiment à quel niveau cela est implémenté que ce soit machine, os, c bibliothèque, ou juste mon utilisation de celui-ci. – robisrob

Répondre

0

Cela fait de nombreuses années, mais je pense qu'il existe une variable d'environnement DOS que C recherche pour déterminer le fuseau horaire. C peut par défaut à EST s'il ne trouve pas la variable d'environnement. Je ne peux pas parler des aspects javascript de la question.

0

En ce qui concerne les problèmes de lumière du jour, le code va avoir des problèmes. Aux Etats-Unis, "mon heure actuelle 10:25 AM aurait dû être" Mon 2017-03-13 10:25:36 EDT "(EDT vs EST) .Le code TurboC pittoresque va certainement avoir des problèmes avec les règles DST évoluées qui ont différé au cours des décennies.

OMI, toute utilisation de tURBOC localtime(), mktime(), terrain struct tm.isdst et _daylight seront tous donnent des résultats peu satisfaisants concernant le temps de l'heure d'été et probablement une source inépuisable de problèmes de fuseau horaire. soit utiliser un compilateur/bibliothèque moderne ou importer/rouler vos propres (ugh) routines fuseau horaire/lumière du jour

Alternative, tenir à time_t et le temps universel -. pas de temps locale

+0

peut-être ma question est trop alambiquée pour obtenir cela, mais même la valeur time_t semble être affectée, ayant 5 heures en plus de l'heure définie dans DOS. Je suppose que je devrais juste soustraire 5 heures de cela et l'appeler un jour depuis comme vous dites que je ne peux probablement pas vraiment le réparer. – robisrob

+0

Comme d'autres l'ont commenté, le sens du temps "DOS" était généralement "heure locale" et la conversion en universel dépend de la connaissance du fuseau horaire _et_ du réglage de l'heure d'été. Comme les ordinateurs n'étaient pas si mobiles, le fuseau horaire était raisonnablement constant. Malheureusement, le changement de DST, ou pas, était souvent mis en place de manière algorithmique (selon une règle fixe) et cette règle ne pouvait pas faire l'objet de [mises à jour] sporadiques (https://en.wikipedia.org/wiki/Daylight_saving_time_in_the_United_States#Extension_of_daylight_saving_time_.281975. E2.80.931986.29). Bonne chance. – chux