我是C ++的新手,我在Unixtime添加方面遇到了问题。例如,我有一个日期8.10.2014 14:49
我需要添加26天,12小时,44分钟。这是我的代码:
#include <iostream>
#include <ctime>
struct Date {
int Minute;
int Hour;
int Day;
int Month;
int Year;
};
int main(){
time_t rawtime;
struct tm * timeinfo;
Date startDate;
std::cin >> startDate.Year;
std::cin >> startDate.Month;
std::cin >> startDate.Day;
std::cin >> startDate.Hour;
std::cin >> startDate.Minute;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
timeinfo->tm_year = startDate.Year - 1900;
timeinfo->tm_mon = startDate.Month -1;
timeinfo->tm_mday = startDate.Day;
timeinfo->tm_hour = startDate.Hour;
timeinfo->tm_min = startDate.Minute;
rawtime = mktime ( timeinfo ) + 2555027;
std::cout << rawtime << std::endl;
struct tm *tm = localtime(&rawtime);
char date[80];
strftime(date, sizeof(date), "%Y %m %d %H %M", tm);
std::cout << date;
}
答案与事实大致相似,但不要纠正。为什么?
答案 0 :(得分:0)
如果你有C ++ 11(或C ++ 14)和一个相对最新的编译器,你可以使用这个库:
http://howardhinnant.github.io/date/tz.html
像这样:#include <chrono>
#include <iostream>
#include "tz.h"
int
main()
{
using namespace date;
using namespace std::chrono_literals;
auto zone = current_zone();
auto time = make_zoned(current_zone(), local_days{8_d/10/2014} + 14h + 49min);
time = time.get_sys_time() + days{26} + 12h + 44min;
std::cout << time << '\n';
}
这大致相当于您拥有的内容,它假定您指定的日期位于计算机的本地时区,并且您还希望将结果存储在计算机的本地时区中。对我来说,这输出:
2014-11-04 02:33:00 EST
但是你也提到过&#34; Unixtime&#34;,这对我来说意味着Unix time。此时间以UTC为单位,缺少夏令时等复杂功能。如果打算在Unix time中执行此操作,则可以使用此库更轻松,更便宜地执行此操作:
http://howardhinnant.github.io/date/date.html
像这样:#include <chrono>
#include <iostream>
#include "date.h"
int
main()
{
using namespace date;
using namespace std::chrono_literals;
auto time = sys_days{8_d/10/2014} + 14h + 49min + days{26} + 12h + 44min;
std::cout << time << '\n';
}
将可以输出:
2014-11-04 03:33
使用&#34; chrono literals&#34; (例如14h
)暗示C ++ 14。如果您使用的是C ++ 11,则可以使用更详细的hours{14}
(hours
在名称空间std::chrono
中)替换。如果你在C ++ 03中,那么,never mind。 : - )