2015-05-08 2 views
0

Я создал текущую time_point и преобразовал ее в структуру tm и напечатал ее значения. Теперь преобразование этой структуры tm в time_point. При сравнении первого и второго time_points, это говорит о том, что они разные. Но значения структуры точно такие же.Не удается проверить преобразование с time_point в tm и tm обратно в time_point

Может ли кто-то увидеть, где я делаю неправильно?

#include <iostream> 
#include <ctime> 
#include <chrono> 

using namespace std; 
using namespace std::chrono; 

system_clock::time_point toTimePoint(struct tm tim) 
{ 
    return std::chrono::system_clock::from_time_t(mktime(&tim)); 
} 

tm toTm(system_clock::time_point tp) 
{ 
    time_t tmt = system_clock::to_time_t(tp); 
    struct tm * tim = localtime(&tmt); 
    struct tm newTim(*tim); 
    cout << "Info: " << tim->tm_mday << "/" << tim->tm_mon << "/" << tim->tm_year << " " << tim->tm_hour << ":" << tim->tm_min << ":" << tim->tm_sec << endl; 
    cout << "Is Daylight saving: " << tim->tm_isdst << " wday: " << tim->tm_wday << " yday: " << tim->tm_yday << endl; 
    return newTim; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    system_clock::time_point tp = system_clock::now(); 

    struct tm tmstruct = toTm(tp); 
    system_clock::time_point newtp = toTimePoint(tmstruct); 
    cout << "Time comparison: " << (tp == newtp) << endl; 

    toTm(newtp); 
} 

Выход:

Информация: 8/4/115 16:26:20 Is Переход на летнее: 0 WDAY: 5 yday: 127

Время сравнения: 0

информация : 8/4/115 16:26:20 Является летним днем: 0 день: 5 yday: 127

ответ

0

Это округление. time_point может иметь гораздо более высокое разрешение, чем time_t. time_t - это просто секунды, а time_point определяется системой. Например, в linux libstdC++ это наносекунды.

В качестве примера, что вы делаете, это похоже на ниже

float f = 4.25; 
    int i = (int)f; // i is 4 
    std::cout << i << std::endl; 
    float f2 = i; // f2 is 4.0 
    std::cout << (f == f2) << std::endl; // false 
    int i2 = (int)f2; // i2 is also 4 
    std::cout << i2 << std::endl; 

 Смежные вопросы

  • Нет связанных вопросов^_^