2016-01-20 73 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

你可以現在檢查.... –