在我的服务器上运行date会得到正确的时间。但是在C(++)中使用localtime(),我得到了错误的时间。
运行date:Fr 30. Nov 12:15:36 CET 2012
使用localtime():Fr 30 Nov 2012 11:15:36 CET
这是怎么回事?
操作系统: Debian 5.0.10
下面是一些代码:
struct tm* today;
today = localtime(...);
strftime(timeBuffer,50,myConnection.getMetaData().getDateFormat().c_str(),today);发布于 2012-11-30 19:36:55
免责声明:这个答案是在添加任何提到
strftime之前编写的,是对时间戳中1小时差异的直觉反应。现在回过头来看,这种1小时的差异可能不是由于DST (因为日期不在夏季),而是可能显示了UTC时间戳( UTC和CET之间的1小时差异)。
不幸的是,答案被接受了,所以我不能删除它。更不幸的是,这个问题在没有额外信息的情况下是无法回答的。
为了完全透明,将原始答案留在这里,但要知道,它并没有解决问题:
localtime返回的struct tm有一个tm_isdst字段,指示夏令时是否生效。在设置时间格式时,需要考虑该字段。
尝试使用asctime来格式化时间,例如。:
puts(asctime(today));发布于 2012-11-30 19:55:25
你试过这个吗?:
time_t rawtime;
struct tm * today;
time ( &rawtime );
today= localtime ( &rawtime );
puts(asctime (today));发布于 2012-11-30 20:42:28
处理日期和时间非常容易出错,而且测试通常很糟糕。我总是推荐使用boost::date_time http://www.boost.org/doc/libs/1_52_0/doc/html/date_time.html
下面是一些很好的http://en.highscore.de/cpp/boost/datetime.html示例
https://stackoverflow.com/questions/13644182
复制相似问题