c – 如何从时间()获取一个时间 - 代码日志

c – 如何从时间()获取一个时间

我有一个时间表示为从1970年1月1日午夜,UTC(早期调用time()的结果)以来经过的秒数。这个时候如何添加一天?

在大多数情况下,添加24 * 60 * 60作品,但如果夏令时间之间开启或关闭,则会失败。换句话说,我主要想添加24小时,但有时候需要23或25个小时。

说明 – 程序:

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

int main()
{
  time_t base = 1142085600;
  for(int i = 0; i < 4; ++i) {
    time_t time = base + i * 24 * 60 * 60;
    std::cout << ctime(&time);
  }
  return 0;

}

生产:

Sat Mar 11 08:00:00 2006
Sun Mar 12 09:00:00 2006
Mon Mar 13 09:00:00 2006
Tue Mar 14 09:00:00 2006

我想要3月12日,13日,…的时间也是上午8点。

FigBug提供的答案指出我正确的方向。但是我不得不使用本地时间而不是gmtime。

int main()
{
  time_t base = 1142085600;
  for(int i = 0; i < 4; ++i) {
    struct tm* tm = localtime(&base);
    tm->tm_mday += i;
    std::cout << asctime(tm);
 }
 return 0;
}

给我吗:

Sat Mar 11 08:00:00 2006
Sat Mar 12 08:00:00 2006
Sat Mar 13 08:00:00 2006
Sat Mar 14 08:00:00 2006

哪个是我想要的使用gmtime给我的时间在14:00:00

不过请注意,所有的日子都是星期六。此外,它到三月三十三日,三十三等。如果我扔在mktime函数我回到我开始的地方:

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

int main()
{
  time_t base = 1142085600;
  for(int i = 0; i < 4; ++i) {
    struct tm* tm = localtime(&base);
    tm->tm_mday += i;
    time_t time = mktime(tm);
    std::cout << asctime(tm);
 }
 return 0;
}

给我:

Sat Mar 11 08:00:00 2006
Sun Mar 12 09:00:00 2006
Mon Mar 13 09:00:00 2006
Tue Mar 14 09:00:00 2006

我失踪了什么?

好的,我试过FigBug的最新建议是使用:

 std::cout << ctime(&time);

而不是asctime,但我得到相同的结果。所以我想我的图书馆和/或编译器搞砸了。我在cygwin上使用g 3.4.4。我将文件复制到Solaris 5.8并使用g 3.3编译。我得到正确的结果!实际上,无论我是使用ctime还是asctime输出,我都会得到正确的结果:

Sat Mar 11 08:00:00 2006
Sun Mar 12 08:00:00 2006
Mon Mar 13 08:00:00 2006
Tue Mar 14 08:00:00 2006

我也可以使用g 3.4.6获得Red Hut Linux上的正确结果(带有两个输出功能)。

所以我想我遇到了一个Cygwin的bug。

谢谢你的帮助和建议….

使用gmtime()将time_t转换为struct tm

一天添加(tm_mday)

使用mktime()将struct tm转换回time_t

有关更多信息,请参阅time.h

编辑:

我刚刚尝试过,这样做:

int main()
{
  time_t base = 1142085600;
  for(int i = 0; i < 4; ++i) {
    struct tm* tm = localtime(&base);
    tm->tm_mday += i;
    time_t next = mktime(tm);
    std::cout << ctime(&next);
 }
 return 0;
}
http://stackoverflow.com/questions/310363/how-to-add-one-day-to-a-time-obtained-from-time

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 如何从时间()获取一个时间