如何将1970年以来的秒数转换为C++中的DateTime?
我得到了一次在以下格式:如何将1970年以来的秒数转换为C++中的DateTime?
1296575549:573352
结肠的左边部分是用秒和微秒右侧部分。
请帮忙。
感谢,
西德妮
如何将1970年以来的秒数转换为C++中的DateTime?
我得到了一次在以下格式:如何将1970年以来的秒数转换为C++中的DateTime?
1296575549:573352
结肠的左边部分是用秒和微秒右侧部分。
请帮忙。
感谢,
西德妮
尝试使用gmtime的()(见http://www.cplusplus.com/reference/clibrary/ctime/gmtime/)或本地时间()来转换time_t为struct tm
使用boost::Date_Time做到这一点。下面的代码假设_interval
是自1970年以来的秒数。请注意,此代码示例不处理微秒部分,但我确信可以修改它以执行此操作。
#include <boost/date_time/gregorian/gregorian_types.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
double interval(1296575549.0f);
boost::posix_time::ptime m_DateTime = ptime(date(1970, 1, 1),
time_duration(0, 0, 0,
time_duration::ticks_per_second() *
(time_duration::fractional_seconds_type)_interval));
好,最复杂的案件:
86'400 s/day
31'557'600 s/year (365.25 d)
1296575549/31557600 = 41 years
1296575549-41*31557600 = 2'713'949 s
2713949/86400 ==> 31 d
2713949-31*86400 =35'549
35549/(60*60) = 9h
35549-9*60*60 = 3'149
3'149/(60*60) = 0h
3'149- 0* (60*60) = 3'149
3149/60 = 52 m
3149-52*60 = 29s
--> year = 1970 + 41
--> month = 1 + 0
--> day = 31 (+1?)
--> Time 00:52:29
==> 2011, Jan 31, 00:52:29
要计算一个月从一天起,你需要复制粘贴一个isLeapYear函数,因为二月份。
嗯,看起来像一个也需要考虑直到最后一个闰年的闰年,这些闰年在剩余中被减去。嗯,夏令时间的影响...
睡觉!
闰年,时区......没有什么不能用良好的思维来解决,但是自制的转换功能存在太多潜在问题。我建议不要这样做,因为有很多库能够在各种框架中执行转换。 – 2011-02-02 13:58:18
正如在几秒钟内持续的例子,让我们假设你想拥有你的程序的运行时间的想法:
#include <ctime>
time_t startRawTime;
time(&startRawTime);
//...your program performs computations...
time_t endRawTime;
time(&endRawTime);
time_t elapsedSec = difftime(endRawTime, startRawTime);
// but elapsedSec can be any duration, e.g. 3734, as long as it is in seconds
tm * ptm = gmtime(&elapsedSec);
printf("elapsed time: %02dh %02dm %02ds\n",
ptm->tm_hour,
ptm->tm_min,
ptm->tm_sec);
你会得到这样的事情,例如:
elapsed time: 01h 02m 14s
有关使用C/C++库转换时间的三件重要事情。
gmtime()
或标准库localtime()
从time_t的转换为结构TM,但time_t的分辨率是划时代秒。所以小数秒不会计数。
mktime()
将结构tm向后转换为time_t,但如果输入日期超出范围,它将返回-1。 (参考:year 2038 problem)
如果您不使用64位时间戳,即使您在64位计算机上运行程序,仍然存在2038年问题。有64位版本的功能,如,localtime64()
,mktime64()
,可能会解决年度超出范围问题。 (Reference)
考虑使用boost – HyLian 2011-02-02 10:51:45
您是否使用特定的DateTime库? – 2011-02-02 13:40:36