本地时间在nohup文件中恢复为UTC

时间:2015-04-23 21:45:51

标签: c nohup ctime

我有一些程序写入带有日期戳的nohup文件。当程序在终端中运行并打印到屏幕时,日期显示正确的本地时间。但是,当使用nohup命令从启动启动程序并将输出发送到文件时,时间始终为UTC。

    time_t curtime;
    time(&curtime);
    //Printed to nohup.out (processlog.txt)
    printf("Application Started  %s", ctime(&curtime));

我尝试了localtime()和strftime(),结果是一样的。

我可能会使用某种手动偏移。我尝试使用一个简单的tm_hour偏移量,但是当UTC时间转换到第二天时,这将不起作用。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

即使使用系统(“日期”);没有在nohup文件日期/时间戳中显示当地时间。 date命令将打印“UTC”。

也许这就是“走过街区越过门槛”但是添加这个子例程可行。我只希望夏令时能在今年晚些时候正常转换。

int print_time()
  {
    struct tm *localtime;
    time_t rawtime;
    time_t offset;

    setenv( "TZ", "EST5EDT", 1 );
    tzset();

    time(&rawtime);
    /* Get GMT time Offset by the timezone and DST*Number of seconds in an hour*/
    offset = (rawtime - timezone + (daylight*3600));
    localtime = gmtime(&offset);
    printf("%02d/%02d/%02d %2d:%02d:%02d\n",localtime->tm_year+1900, localtime->tm_mon+1, localtime->tm_mday,  localtime->tm_hour, localtime->tm_min, localtime->tm_sec);

    return(0);
  }

在需要日期/时间戳的任何地方运行sub。例如:

//Printed to nohup.out (application_log.txt)
printf("Application Started  ");
print_time();