linux时间戳转换不对,转换为unix时间戳不正确

我有我写了一个函数(如果有一个很好的标准替代,请让我知道...)转换为unix时间戳不正确

time_t get_unix_time(string time_str) {

time_t loctime;

time(&loctime);

struct tm *given_time;

time_str = time_str.substr(0, time_str.find_first_of('.'));

replace(time_str.begin(), time_str.end(), ':', ',');

replace(time_str.begin(), time_str.end(), '-', ',');

replace(time_str.begin(), time_str.end(), '/', ',');

replace(time_str.begin(), time_str.end(), ' ', ',');

given_time = localtime(&loctime);

vector trecord = split_string(time_str, ',');

given_time->tm_year = atoi(trecord.at(0).c_str()) - 1900;

given_time->tm_mon = atoi(trecord.at(1).c_str()) - 1;

given_time->tm_mday = atoi(trecord.at(2).c_str());

given_time->tm_hour = atoi(trecord.at(3).c_str());

given_time->tm_min = atoi(trecord.at(4).c_str());

given_time->tm_sec = atoi(trecord.at(5).c_str());

return mktime(given_time);

}

输入(time_str)的函数是格式1970-01-01 00:00:00.0。所述split_string()函数把字符串time_str到含有载体:

{1970年,01,01,00,00,00}

其用于填写given_time结构。

我写了一个函数来测试它,并正确地通过它输入(epoch开始)。但是,它给我的时间是21600,这是1970-01-01 06:00:00或UTC + 6。期望的输出是(时期的开始)。

注意:我在美国中部时区,即UTC - 6。1970年1月1日午夜CST,time @ UTC将在1970年1月1日06:00:00。

我的函数中是否有任何特定于我的时区的东西?我在这个函数中做了什么错误,或者我可以做些不同的事情来使它独立于区域,或者至少总是UTC。

2011-01-13

Sagar

+0

此外,我不能使用boost库或任何其他库。我只能使用标准的C++东西。 –

2011-01-13 16:22:55

+1

C++库中的时区处理很隐晦。如果你的环境变量`TZ`的值设置为UTC,那么这段代码就可以工作。 –

2011-01-13 16:36:18

+1

mktime将当前时间解释为给定时间。所以如果你给1970-01-01 00:00:00它会在你的当地时间,所以mktime将返回UTC-0时间,即1970-01-01 06:00:00 –

2011-01-13 16:38:42

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值