2016-01-20 71 views
-2

我有一个关于带GPS的车的项目。我需要返回每辆车的开始和结束时刻。将13位小数转换为日期时间

所以我们有:
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] 我做错了什么?

+5

您应该在提问前检查您的问题,并确保格式正确。 – NathanOliver

+1

通常的提示:编译所有警告和调试信息('g ++ -Wall -Wextra -g')然后**使用调试器**('gdb')&[valgrind](http://valgrind.org/)。 –

+0

如果你认为评论很残酷,你显然是新手。它实际上比我见过的许多更友善。 –

回答

1

这是不好的。据时代转换,我们应该得到这样的:格林尼治标准时间:星期四,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,你可以改为:milliseconds{1439467747492}。如果你只有C++ 03,那么你比时代落后13年,并且坚持使用ctime。 ;-)

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

如果我可以修复和纬度和经度的问题将是巨大的笑

如果你能经纬度转化为一个IANA时区名(也有工具来做到这一点),我我们为您提供了一个IANA timezone database parser,它与<chrono>"date.h"互操作。

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 
+0

感谢您的回复!所以我检查了我在momenti和momentf中的情况。他们有正确的价值观。但我不知道如何将13位数字转换为正常日期,如10.05.2015 21:30。这就是问题。我用ctime,但对我来说做的不是正确的东西 –

+0

你能告诉我在C++ Visiual Studio2013中使用什么函数吗? –

+0

你可以现在检查.... –