linux C mktime时区问题

mktime 返回1970年1月1日的秒数,和当前本地设置的时区相关

日期遇到本地时区是美东时间,远端设置过来的时间是上海时间,再设置成utc时间,其中代码如下:

#include <time.h>
int g_timediff =8;
int btsSetTime(char* msgBuf)
{
    char szTime[32];
    char szCmd[32];
	         
    memset(szTime,0,32);
    memset(szCmd,0,32);
    
    strcpy(szTime, msgBuf);

    struct tm tm_time;  
    strptime(szTime, "%Y.%m.%d-%H:%M:%S", &tm_time);
#if 1    
    setenv("TZ","Asia/Shanghai","1");
	tzset();
#endif	
    time_t settime = mktime(&tm_time);
    time_t curtime = settime - g_timediff*3600;
    struct tm *lt;
    lt = gmtime(&curtime);
    strftime(szCmd, 32, "date -u -s %Y.%m.%d-%H:%M:%S", lt);
    printf("time cmd : %s\n",szCmd);
    system(szCmd);
     return 0;
}

int main()
{
   char szTime[32];
   sprintf(szTime,"%s","2020.02.28-17:56:55");
   btsSetTime(szTime);
   return 0;   
}这里插入代码片

还有一种方法是通过设置环境变量

TZ=CST+/-hhmm 或 hh:mm
如:
东8区设置;
export TZ=CST-8

export TZ=CST-0800

export TZ=CST-8:00

西830设置;
export TZ=CST+0830

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值