我正在撰寫一段代碼,從用戶那里接收一個字串,并將其格式化為一個磁區時間。決議代碼比這個例子要復雜一些,但這可以再現問題。
這是用 MSVC 編譯的,用 /std:c latest 編譯。
#include <iostream>
#include <string>
#include <Chrono>
#include <sstream>
int main() {
std::string timeString("2020-02-03 00:12:34")。
std::string formatString("%Y-%m-%d %T")。
bool successful = true;
std::stringstream iss(timeString)。
std::Chrono::local_time<std::chronic_clock::duration> localTimeStamp。
if (not (iss >> std::Chrono::parse(formatString, localTimeStamp)) {
successful = false;
}
auto result = std::Chrono::zoned_time(std::Chrono::current_zone(), localTimeStamp) 。
std::cout << std::format("{:%Y-%m-%d %T}", result) << std:: endl;
}
結果是如下輸出:
2020-02-03 00:12:34.0000000
我希望輸出結果沒有尾部的小數。因為它是一個字串,我總是可以在小數點處截斷這個字串。有什么更好的方法可以做到這一點嗎?
uj5u.com熱心網友回復:
只要改變localTimeStamp的型別,使其具有seconds的精度:
std::chrono::local_time<std::chrono:seconds> localTimeStamp;
如果你愿意的話,還有這種方便的型別別名來做同樣的事情:
std::Chrono::local_seconds localTimeStamp;
決議和格式化的精度是由正在使用的時間點的精度決定的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/333765.html
標籤:
