Considérez le code suivant:
struct tm timestr; makeATMFromAStringForExample( time, timestr ); time_t timet = mktime( ×tr ); timet += localTimeOffset;
3 Réponses :
Cela m'a pris du temps pour comprendre, et j'espère que cela sera utile aux autres.
Posix Fonctions comme si je cours sous Linux ou OS X, Si j'exécute Une coquille Cygwin, Si le programme a été construit avec GCC sous Cygwin, je parie qu'elle fonctionnerait correctement dans les coquilles Cygwin. P> Donc, la réponse est donc de s'assurer que les programmes qui appellent POSIX Time Fonctions telles que Je l'ai fait Comme: p> localTime code> utilisera la variable d'environnement
tz code > Déterminer quel fuseau horaire à utiliser. Si
tz code> n'est pas défini, il utilisera le fuseau horaire par défaut du système. P>
tz code> est réglé correctement et tout fonctionne . Si j'exécute ce programme dans la coquille sous Windows,
tz code> n'est pas défini, la fonction renvoie la fuseau horaire par défaut du système d'exploitation, qui produit à nouveau des résultats corrects. P>
TZ code> est définie - mais puisque j'ai construit le programme à l'aide de MSVC, à l'aide de la propre bibliothèque STDC de MSVC - il ne peut pas interpréter la variable code> TZ code> de Cygwin. Donc, il est par défaut à GMT. P>
localTime () code>, si vous souhaitez que les fonctions temporelles fonctionnent à droite sous les coquilles de Cygwin, vous devez non définir
TZ code>. P>
putenv ("tz =") code> ne compte pas vraiment TZ; Il la définit à la chaîne vide. Je ne sais pas si cela importe, mais vous pouvez essayer d'utiliser
nonsetenv ("tz") code> à la place.
Merci pour cela. Je l'ai regardé. Windows n'a pas de ouenv. Pour non définissez une variable, vous le définissez sur la chaîne vide avec Putenv.
Sous Cygwin, il suffit de gérer "non défini"
Essayez de définir le drapeau TM_ISDST B> dans une structure TM. P>
Le drapeau de l'heure d'été (TM_ISDST) est supérieur à zéro si le temps d'économie de jour est en vigueur, zéro si l'heure d'économie de jour n'est pas en vigueur, et moins de zéro si les informations ne sont pas disponibles. P>
Si je me souviens bien, sous Windows, il doit être de -1 pour fonctionner correctement. P>
DST n'expliquerait pas une différence de 5 heures.
Ouch .. Désolé, tu as absolument raison. Je n'ai pas vu cette différence de 5 heures. La chose est que j'avais un problème similaire avec Linux / Windows et je l'ai résolu correctement dans la définition de la DST.
Utiliser @Update exporter tz = "" code> dans la coque Cygwin peut être le meilleur moyen. P>
Salut, Tunaki. Merci votre édition! P>