gpt4 book ai didi

c++ - 如何正确地将日期添加到日期?

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:04 25 4
gpt4 key购买 nike

我是 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;
}

答案与事实大致相似,但不要更正。为什么?

最佳答案

如果你有 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

但是您还提到了“Unixtime”,对我来说这意味着 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

“计时文字”(例如 14h)的使用意味着 C++14。如果您使用的是 C++11,则可以替换为更详细的 hours{14}(hours 在命名空间 std::chrono 中).如果你在 C++03 中,那么,never mind . :-)

关于c++ - 如何正确地将日期添加到日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33639178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com