Как получить текущее время совпадают с изменениями часового пояса в C - PullRequest
2 голосов
/ 21 июня 2019

Я работаю на роутере на базе Linux.Я работаю над приложением CЯ хочу получать текущее время в своем приложении непрерывно.

Проблема в том, что оно дает мне время в соответствии с часовым поясом запуска приложения, хотя я изменил часовой пояс после запуска приложения.Часовой пояс системы был изменен.Команда date на терминале Linux показывает другой часовой пояс и дату / время.

time_t currTm;
struct tm *loctime;
char udrTime[50];
while (1)
{
    currTm = time(NULL);
    loctime = localtime(&currTm);
    strftime(udrTime, sizeof(udrTime), "%Y-%m-%d %H:%M:%S", loctime);
    printf("udr_time = %s\n", udrTime);
    usleep(10000);
}  

Ожидается вывод в соответствии с изменениями часового пояса.

1 Ответ

2 голосов
/ 21 июня 2019

Чтобы изменить часовой пояс из приложения, просто установите TZ переменную среды, больше ничего не нужно:

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

void print_time(time_t t) {
    char buf[256];
    strftime(buf, sizeof buf, "%H:%M:%S", localtime(&t));
    printf("%s %s\n", getenv("TZ"), buf);
}

int main() {
    time_t t = time(NULL);

    setenv("TZ", "Europe/London", 1);
    print_time(t);

    setenv("TZ", "America/New_York", 1);
    print_time(t);

    return 0;
}

Выходы:

Europe/London 15:48:58
America/New_York 10:48:58
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...