C++ 将13位小数转换为日期时间

C++ 将13位小数转换为日期时间,c++,class,decimal,ctime,C++,Class,Decimal,Ctime,我有一个关于带GPS的汽车的项目。我需要返回每辆车的开始和结束时刻 所以我们有: 时间x,y; 因为稍后我将使用它们进行转换 我有个问题。我从外部文件读取以下格式的数据: auto1 1439467747492 auto1 1439467748512 ……等等。 auto1->车辆名称 143946747492->汽车的时刻 我试图得到每辆车的第一时刻和最后时刻的第一个位置。这是C++中的代码: long test = momenti[choice1]/1000; time_t x =

我有一个关于带GPS的汽车的项目。我需要返回每辆车的开始和结束时刻

所以我们有:
时间x,y; 因为稍后我将使用它们进行转换

我有个问题。我从外部文件读取以下格式的数据:

auto1
1439467747492 
auto1
1439467748512
……等等。 auto1->车辆名称
143946747492->汽车的时刻

我试图得到每辆车的第一时刻和最后时刻的第一个位置。这是C++中的代码:

 long test = momenti[choice1]/1000;
 time_t x = test;
 cout << "     Momentul initial:\n " << ctime(&x) << endl;
 long test1 = momentf[choice1] / 1000;
 time_t y = test1;
 cout << "     Momentul final:\n " << ctime(&y) << endl;
long test=momenti[choice1]/1000;
时间x=试验;
库特
这不好。根据epoch converter,我们应该得到以下信息:格林尼治标准时间:2015年8月13日星期四12:09:07格林尼治标准时间

下面是如何用C++ 11/14获取这个输出,并使用它扩展了C++ <代码> <代码>库来处理日期。
#include "date.h"
#include <chrono>
#include <iostream>

int
main()
{
    using namespace std::chrono;
    using namespace std;
    using namespace date;
    using time_point = std::chrono::time_point<system_clock, milliseconds>;
    auto tp = time_point{1439467747492ms};
    auto dp = floor<days>(tp);
    auto time = make_time(tp - dp);
    auto ymd = year_month_day{dp};
    cout << "GMT: " << weekday{dp} << ", " << ymd.day() << ' ' << ymd.month()
         << ' ' << ymd.year() << ' ' << time  << " GMT\n";
}
我用分数秒来取乐,浪费他们似乎很遗憾(C库不会给你)。如果您确实不想要它们,则很容易修复:

    auto time = make_time(floor<seconds>(tp) - dp);
上面的
143946747492ms
需要C++14。如果您只有C++11,则可以改为使用sub:
毫秒{143946747492}
。如果您只有C++03,那么您就落后于时代13年,并且坚持使用
ctime
;-)

chrono
解决方案将为您提供更大的类型安全性、更大的灵活性和更高的性能

如果我能解决和纬度和经度的问题将是伟大的lol


如果您可以将纬度和经度转换为IANA时区名称(有工具可以做到这一点),我为您准备了一个可以与
“date.h”

进行互操作的工具,您应该在提问之前检查问题,并确保其格式正确。常见提示:使用所有警告和调试信息进行编译(
g++-Wall-Wextra-g
)然后使用调试器(
gdb
)&。如果你认为这个评论很残酷,那么你显然是新来的。它实际上比我见过的许多人都好。例如,我随机使用ctime处理了两个值。我测试了瞬间[1]和瞬间[100]..函数返回不同的值…但是当我使用代码时,我在momenti和momentf中得到相同的值。为什么?我认为是来自getter或array@ravenspoint你现在能查一下吗?你需要完整的资料还是什么?因为我用了很多课堂笔记来回答你!所以我查了一下我在momenti和momentf中的内容。他们我不知道如何把一个13位数的数字转换成一个正常的日期,比如105.5.2015 21:30。这是问题。我用cTime-但是没有正确的事情对我来说,你能建议我在C++ Visual Studio2013中使用什么函数吗?我需要一个函数来转换数字,在一个日期里有13个数字。?不好。根据epoch converter,我们应该得到以下信息:GMT:Thu,2015年8月13日12:09:07 GMT Halleluia!!!我现在将发布正确代码:P。两天后第一次胜利:)…如果我能解决,纬度和经度问题将非常棒lol
#include "date.h"
#include <chrono>
#include <iostream>

int
main()
{
    using namespace std::chrono;
    using namespace std;
    using namespace date;
    using time_point = std::chrono::time_point<system_clock, milliseconds>;
    auto tp = time_point{1439467747492ms};
    auto dp = floor<days>(tp);
    auto time = make_time(tp - dp);
    auto ymd = year_month_day{dp};
    cout << "GMT: " << weekday{dp} << ", " << ymd.day() << ' ' << ymd.month()
         << ' ' << ymd.year() << ' ' << time  << " GMT\n";
}
GMT: Thu, 13 Aug 2015 12:09:07.492 GMT
    auto time = make_time(floor<seconds>(tp) - dp);
GMT: Thu, 13 Aug 2015 12:09:07 GMT