关于ACE_OS::timezone与date +%z不一致的问题
环境suse11,分别通过以下方式取得时区:1. 命令行 date +%z
2. ACE_OS::timezone()
得到的2组结果是:
1. 命令行: +0800 , ACE_OS::timezone : -28800 相当于 -0800
2. 命令行: -0400, ACE_OS::timezone : 18000 相当于 +0500(USA的Michigan州)
请问各位清楚ACE_OS::timezone的工作方式吗,请教了 这种问题,其实主要的解决办法就一个:追踪源代码,看看怎么实现的就知道了。 /**
* @file timezone.cpp
* @brief
*/
#include "ace/OS.h"
#include <iostream>
using namespace std;
#include <time.h>
int main(int argc, char *argv[])
{
struct timeval tv;
struct timezone tz;
cout << ACE_OS::timezone() << endl;
// Unix 下 ACE_OS::timezone() 相当于下面两代码
::gettimeofday(&tv, &tz);
cout << tz.tz_minuteswest * 60 << endl;
// 由于 POSIX 已经弃用了 <gettimeofday> 的第二个参数.
// 所以 ACE_OS::timezone() 的实现是有问题的
// 命令 date +%z 相当于下面的代码
struct tm lt;
time_t tk;
char buf;
lt = *::localtime(&tk);
::strftime(buf, sizeof(buf), "%z", <);
cout << buf << endl;
system("date +%z");
return 0;
} mymtom 发表于 2013-3-20 17:19 static/image/common/back.gif
非常感谢.特别是说的关于date +%z,我准备采用兄台的这种方法.仅仅修改为localtime_r.
查看源码,因为宏的关系,我发现其实是采用了::tzset();return timezone;
只是我搞不清楚为啥时区有这么多个api.我需要采用的是iso8601,我决定使用兄台这种方法.
页:
[1]