将13位小数转换为datetime

时间:2016-01-20 20:34:33

标签: c++ class decimal ctime

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

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

我有问题。我以这种格式读取外部文件数据:

auto1
1439467747492 
auto1
1439467748512

...等。 auto1->汽车名称;
1439467747492->汽车的时刻

我试图获得每辆车的第一个时刻和最后时刻的第一个位置。这是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;

我收到每辆车的相同日期。类似于momenti[i]=momentf[i] 我做错了什么?

2 个答案:

答案 0 :(得分:1)

#include <iostream>
#include <cstring>
#include <time.h>
using namespace std;

int main()
{
    long test = 1439467747492;
    time_t x = test;
    cout << ctime( &x )  << endl;
    return 0;
}

可生产

Tue Sep 18 20:15:32 1990

答案 1 :(得分:1)

  

这不好。根据epoch转换器我们应该得到这个:格林尼治标准时间:星期四,2015年8月13日12:09:07 GMT

以下是如何使用C ++ 11/14获取此输出并使用this free, open source date library扩展C ++ <chrono>库来处理日期。

#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

我为了好玩而投入了一小段时间,浪费它们似乎是一种耻辱(C lib不会给你这些)。如果你真的不想要它们,很容易解决:

    auto time = make_time(floor<seconds>(tp) - dp);

现在输出是:

GMT: Thu, 13 Aug 2015 12:09:07 GMT

您需要上面1439467747492ms的C ++ 14。如果您只有C ++ 11,则可以改为使用C ++ 11:milliseconds{1439467747492}。如果你只有C ++ 03,那么你落后时间已经落后了13年并坚持使用ctime。 ; - )

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

  

如果我能解决问题并且纬度和经度问题会很棒lol

如果您可以将纬度和经度转换为IANA时区名称(并且有工具可以执行此操作),我会为您<chrono>"date.h"和{{1}进行互操作}。