簡體   English   中英

C++ chrono:如何將整數轉換為時間點

[英]C++ chrono: How do I convert an integer into a time point

我設法將時間點轉換為整數,並使用類似於以下代碼的代碼將其寫入文件:

std::ofstream outputf("data");
std::chrono::time_point<std::chrono::system_clock> dateTime;

dateTime = std::chrono::system_clock::now();

auto dateTimeSeconds = std::chrono::time_point_cast<std::chrono::seconds>(toSerialize->dateTime);
unsigned long long int serializeDateTime = toSerialize->dateTime.time_since_epoch().count();
outputf << serializeDateTime << "\n";

現在我正在嘗試從文件中讀取該整數,將其轉換為 time_point,然后打印它。 現在,我的代碼看起來像這樣:

std::ifstream inputf("data");

unsigned long long int epochDateTime;
inputf >> epochDateTime;
std::chrono::seconds durationDateTime(epochDateTime);
std::chrono::time_point<std::chrono::system_clock> dateTime2(durationDateTime);

std::time_t tt = std::chrono::system_clock::to_time_t(dateTime2);
char timeString[30];
ctime_s(timeString, sizeof(timeString), &tt);
std::cout << timeString;

但是,它不打印任何內容。 有誰知道我哪里出錯了?

您有一些奇怪的轉換並分配給您不使用的變量。 如果要將system_clock::time_point存儲為std::time_t並從中恢復time_point ,請不要涉及其他類型並使用為此制作的函數: to_time_tfrom_time_t 另外,檢查打開文件和從文件中提取是否有效。

例子:

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

int main() {
    {   // save a time_point as a time_t
        std::ofstream outputf("data");
        if(outputf) {
            std::chrono::time_point<std::chrono::system_clock> dateTime;
            dateTime = std::chrono::system_clock::now();
            outputf << std::chrono::system_clock::to_time_t(dateTime) << '\n';
        }
    }

    {   // restore the time_point from a time_t
        std::ifstream inputf("data");
        if(inputf) {
            std::time_t epochDateTime;
            if(inputf >> epochDateTime) {
                // use epochDateTime with ctime-like functions if you want:
                std::cout << std::ctime(&epochDateTime) << '\n';

                // get the time_point back (usually rounded to whole seconds):
                auto dateTime = std::chrono::system_clock::from_time_t(epochDateTime);

                // ...
            }
        }
    }
}

撇開日期值錯誤的可能性不談,這里的問題在於sizeof(timeString) 您似乎認為它是30 ,但實際上它是char*的大小,可能是 8 (或者可能是 4)。

根據ctime_s

在運行時檢測到以下錯誤並調用當前安裝的約束處理函數:

 buf or timer is a null pointer bufsz is less than 26 or greater than RSIZE_MAX

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM