我有一些程序写入带有日期戳的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时间转换到第二天时,这将不起作用。
有什么建议吗?
答案 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();