2016-05-02 10 views
1

Ich möchte Unix-Millisekunden-Konverter in ein menschenlesbares Datumsformat implementieren. mit diesem Beitrag https://stackoverflow.com/a/1657307/1979882 Ich habe gefunden, dass ich solche Zeichenfolge empfangen kann, aber ich kann keine Zeitzone innerhalb des Codes einrichten. Der Code verwendet nur die Systemzeitzone.Datumsformatierung in reinem C mit Zeitzonen

#include <stdio.h> 
#include <time.h> 

int main (int argc, char *argv[]) 
{ 
    time_t now; 
    struct tm *lcltime; 

    now = time (NULL); 
    lcltime = localtime (&now); 

    printf ("The time is %d:%d\n", lcltime->tm_hour, lcltime->tm_min); 

    return 0; 
} 

Ist es möglich, es anzupassen?

EDIT

Ich brauche eine Java-ähnliche Methode:

SimpleDateFormat df= new SimpleDateFormat("dd MMM hh:mm z",Locale.ENGLISH); 
df.setTimeZone("Europe/London"); 
System.out.println("London Time " + df.format(System.currentTime())); 
df.setTimeZone("Asia/Benjin"); 
System.out.println("Benjin Time " + df.format(System.currentTime())); 

EDIT_2

Ich fand ich Rüstzeit Zone setenv verwenden, können (...) url https://stackoverflow.com/a/1620451/1979882

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main (int argc, char *argv[]) 
{ 
    struct tm *mt; 
    time_t mtt; 
    char ftime[10]; 

    setenv("TZ", "PST8PDT", 1); 
    tzset(); 
    mtt = time(NULL); 
    mt = localtime(&mtt); 
    strftime(ftime,sizeof(ftime),"%Z %H%M",mt); 

    printf("%s\n", ftime); 
} 

Aber ändert sich die Systemzeitzone. Ich brauche nur Zeitzonenmodifikation nur in meinem Code.

+0

Bezug Können Sie das konkretisieren, was Sie tun wollen? 'localtime' gibt eine Uhrzeit in der lokalen Zeitzone als System zurück. – fluter

+0

Ich bin etwas überrascht ['strftime'] (http://en.cppreference.com/w/c/chrono/strftime) passt nicht die Rechnung für das, was Sie versuchen zu tun, da es verwendet werden kann für format time und dates aussehen wie verdammt nah alles was man logisch (und unlogisch) denken kann. – WhozCraig

+2

Schauen Sie einfach über * Programm zum Drucken der aktuellen formatierten Greenwich Mean Time * auf der Seite, auf die Sie verweisen. Es sollte erklären, dass die Umgebung für eine lokale Zeit festgelegt wird, die sich von der für Ihr System bereits definierten unterscheidet. Rufen Sie an, 'localtime' ruft" tzset "an und berechnet einen Zeitwert basierend auf Ihrer aktuellen Systemkonfiguration. Wenn Sie den Offset von UTC überprüfen möchten, rufen Sie stattdessen 'gmtime' auf. –

Antwort

1

Sie können das Argument basierend auf der erforderlichen Zeitzonendifferenz in localtime ändern.

now += (time_t)(3600*TIME_DIFF_IN_HRS) 
lcltime = localtime (&now); 

völlig tragbar sein, können Sie die aktuelle Zeitzone erhalten, indem this post

+0

ist es möglich, 'TIME_DIFF_IN_HRS' für eine bestimmte Zeitzone zu kennen? Oder muss ich es vordefinieren? – Vyacheslav

+0

Das hängt von der Zeitzone ab, die Sie anzeigen möchten, und von der Zeitzone, in der Sie sich befinden. Wenn Sie in Indien sind und GMT anzeigen möchten, wird dies -5.5 sein. –