我想将自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。
答案 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类轻松获得格式化的时间/日期字符串。