Ich programmiere ein kleines Programm, um die entsprechenden Dateien herunterzuladen, die von einem meteorologischen Softwarepaket verwendet werden sollen. Die Dateien haben das Format YYYYMMDD
und YYYYMMDD HHMM
in UTC. Ich möchte die aktuelle Zeit in UTC in C++ wissen und ich bin auf Ubuntu. Gibt es eine einfache Möglichkeit, dies zu tun?Wie bekomme ich die UTC-Zeit
Antwort
Eine High-End-Antwort in C++ ist die Verwendung von Boost Date_Time.
Aber das kann übertrieben sein. Die C-Bibliothek hat, was Sie in strftime
benötigen, die Handbuchseite hat ein Beispiel.
/* from man 3 strftime */
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
char outstr[200];
time_t t;
struct tm *tmp;
const char* fmt = "%a, %d %b %y %T %z";
t = time(NULL);
tmp = gmtime(&t);
if (tmp == NULL) {
perror("gmtime error");
exit(EXIT_FAILURE);
}
if (strftime(outstr, sizeof(outstr), fmt, tmp) == 0) {
fprintf(stderr, "strftime returned 0");
exit(EXIT_FAILURE);
}
printf("%s\n", outstr);
exit(EXIT_SUCCESS);
}
habe ich ein vollständiges Beispiel auf das, was im Handbuch Seite lautet:
$ gcc -o strftime strftime.c
$ ./strftime
Mon, 16 Dec 13 19:54:28 +0000
$
Das Beispiel der strftime-Manpage verwendet localtime(). OP benötigt stattdessen gmtime(), um die UTC-Zeit zu erhalten. – nos
Die Verwendung von strftime scheint die beste Option zu sein. Vielen Dank. Ich kann bei Bedarf manuell in UTC umwandeln, aber ich möchte herausfinden, was nos gesagt hat. –
@nos Wie würde ich DST mit gmtime() berücksichtigen? –
Sie können gmtime verwenden:
struct tm * gmtime (const time_t * timer);
Convert time_t to tm as UTC time
Hier ein Beispiel:
std::string now()
{
std::time_t now= std::time(0);
std::tm* now_tm= std::gmtime(&now);
char buf[42];
std::strftime(buf, 42, "%Y%m%d %X", now_tm);
return buf;
}
Ideon Verbindung: http://ideone.com/pCKG9K
Sie sollten 'std :: strftime (buf, sizeof buf, ...)' verwenden. Es ist auch erwähnenswert, dass das 'return buf;' nur gültig ist, weil der Wert implizit in eine 'std :: string' konvertiert wird; Wenn 'now' ein' char * 'zurückgibt (wie es wahrscheinlich in C wäre), würden Sie einen Zeiger auf ein lokales Objekt zurückgeben, was ein großes No-No ist. –
Hinweis: Wenn möglich, sollten Sie stattdessen 'gmtime_r' verwenden, das zwar nicht standardgemäß ist, aber sowohl eingangs- als auch datenrennungssicher ist. –
@MatthieuM. Du hast Recht, normalerweise würde ich nach der Existenz von gmtime_r suchen. Ich dachte, es wäre zu viel für diese Antwort. Danke für das nützliche Feedback. – nurettin
- 1. Wie bekomme ich die Methodenaufrufhistorie?
- 2. Wie bekomme ich die Dialoggröße?
- 3. Wie bekomme ich die SocketTimeoutException
- 4. Wie bekomme ich die Kameraposition?
- 5. Wie bekomme ich die leftNavLibrary?
- 6. Wie bekomme ich die Briefbreite?
- 7. Wie bekomme ich die Kurzcodes?
- 8. Wie bekomme ich die Anwendungsversion?
- 9. Wie bekomme ich die Hintergrundfarbe eines TextView?
- 10. Wie bekomme ich die englische Wortdatenbank?
- 11. Wie bekomme ich die Java-Syntax korrekt?
- 12. Wie bekomme ich die FieldInfo eines Arrayfeldes?
- 13. Wie bekomme ich die Spracherweiterung "OverloadedStrings"?
- 14. Drupal: Wie bekomme ich die Modulliste?
- 15. Wie bekomme ich die Seriennummer von Festplatten?
- 16. Wie bekomme ich die Keycodes in Python
- 17. Wie bekomme ich die Dateierweiterung von file_get_contents
- 18. Wie bekomme ich die Dateinamenerweiterung in MySQL?
- 19. Wie bekomme ich die Breite eines Elements?
- 20. Wie bekomme ich die Feldnamen einer Datenbanktabelle?
- 21. Wie bekomme ich die CPU-Temperatur?
- 22. Wie bekomme ich die Bestellzeit in Magento?
- 23. Wie bekomme ich die Werte [] in PHP?
- 24. WPF - Wie bekomme ich die MainWindow-Instanz?
- 25. Wie bekomme ich die Länge eines TypeCode
- 26. Wie bekomme ich die Zeilen nach morgen?
- 27. Wie bekomme ich die aktuelle Tastatursprache?
- 28. Wie bekomme ich die Summe zur Arbeit?
- 29. Wie bekomme ich die Ableitung der Funktion?
- 30. Wie bekomme ich die aktuelle Zeit?
Können Sie die Frage neu formulieren: Möchten Sie _reformat_ die Dateinamen von UTC nach local reaktivieren? Oder möchtest du die aktuelle Zeit als UTC aufrufen? –
Greifen Sie einfach auf die aktuelle Zeit in UTC, Entschuldigung für die Verwirrung, ich werde die Frage bearbeiten. –