将自1970年以来的秒数转换为特定时区的DateTime?

时间:2011-02-17 08:58:39

标签: c++

我想将自1970年以来的秒数转换为特定时区的日期时间。

我有时间在毫秒和服务器的时区。 我通过调用API来获取这些值。我想知道那个时区的年,月,日。

int milisecond = 12347586484; zone =“GMT +8.00”;

我该怎么做?

谢谢, SYD

编辑:如果我使用gmtime(),我会得到正确的日期吗?

timeinmilisecond + 8*360000;

struct tm *jobCreationtm;
time_t t = (time_t)(timeinmilisecond); 
jobCreationtm = gmtime(&t);

注意:我不想使用第三方dll。

2 个答案:

答案 0 :(得分:0)

您可以将TZ环境变量设置为您想要的时区(请参阅tzset的手册页),然后调用localtime。

像(现在测试过的):

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

int main()
{
    ::putenv("TZ=GMT+8");
    time_t t = ::time(0);
    tm* x = ::localtime(&t);
    char buf[1024];
    ::strftime(buf, sizeof(buf), "%a, %d %b %Y %H:%M:%S %z", x);
    std::cout << ::getenv("TZ") << std::endl;
    std::cout << "[" << buf << "]" << std::endl;
    return 0;
}

输出:

GMT+8
[Thu, 17 Feb 2011 02:22:41 -0800]

答案 1 :(得分:0)

服务器的时区是什么格式?它是GMT偏移还是格式化为“America \ Los Angeles”。对于第三方图书馆而言,这是艰难的,因为结果是基于一年中的时间(日光节省)和随时间的变化(例如中西部的某些县,例如每隔几年从EST变为CST)。

考虑安装ICU library。给定时间戳和区域设置(或GMT偏移量),您可以使用TimeZone类轻松获得格式化的时间/日期字符串。