Die Info-Seiten für das GNU date
Befehl enthalten dieses Beispiel:Wie programmiere ich eine Zeit von einer Zeitzone in eine andere in C programmatisch um?
Zum Beispiel mit dem GNU
date
Befehl können Sie die Frage „beantworten Wie spät ist es in New York, als eine Paris Uhr 6 : 30 Uhr am Oktober 31, 2004? " durch ein Datum mit mit `TZ = "Europa/Paris" ab 'wie in die folgende Shell-Transkript gezeigt:$ export TZ="America/New_York" $ date --date='TZ="Europe/Paris" 2004-10-31 06:30' Sun Oct 31 01:30:00 EDT 2004
In diesem Beispiel ist der '--date' Operand beginnt mit seiner eigenen' TZ ' Einstellung, so dass der Rest dieses Operanden nach ' Europa/Paris 'Regeln verarbeitet wird, die Zeichenfolge
2004-10-31 06:30
behandeln, als ob es in Paris wäre. Da die Ausgabe des Befehlsdate
gemäß den gesamten Zeitzonenregeln verarbeitet wird, verwendet sie New York Zeit. (Paris war in der Regel 6 Stunden vor New York im Jahr 2004, aber das Beispiel bezieht sich auf eine kurze Halloween Zeit, als die Lücke 5 Stunden waren.)
Ich versuche, im Wesentlichen die gleiche Sache programmatisch zu erreichen in C ohne das Programm date
millionenfach aufzurufen. Im Grunde suche ich nach einer Möglichkeit, ein beliebiges Datum und eine beliebige Zeit in einer Zeitzone zu nehmen und sie in das entsprechende Datum und die Zeit in einer anderen Zeitzone umzuwandeln, entweder direkt oder über die Konvertierung in und aus UTC. Die Formate der Ein- und Ausgabezeit sind mir egal, solange ich sie mit Standardfunktionen manipulieren kann (strftime
/strptime
/mktime
/etc).
Das date
Programm scheint dies zu erreichen mit komplexen Routinen innerhalb der coreutils
Paket, ich bin auf der Suche nach einer Möglichkeit, dies in C mit entweder Standard-POSIX/Linux-Routinen oder einer externen Bibliothek. Ich schaute auf zoneinfo ziemlich viel, das vielversprechend schien, aber ich kann keine Bibliotheken finden, um irgendetwas nützliches damit zu tun.
Es gibt eine Reihe von subtilen Problemen mit manuellen Berechnungen, die ich vermeiden möchte, wie z. B. DST zu behandeln. Diese Informationen sind in der zoneinfo-Datenbank enthalten, jedoch nicht in einer Weise, die sich für mich bisher als nützlich erwiesen hat. –
Zum Beispiel, diese Arbeit besonders schlecht in Venezuela - das ist offiziell UTC-4: 30 – Quintus