C ++ 20 chrono,解析为分区时间并格式化而没有尾随小数
C++20 chrono, parsing into zoned time and formatting without trailing decimals
我正在编写一些代码,从用户那里获取一个字符串,并将其格式化为分区时间。解析代码比这个例子复杂一点,但是这样会重现问题。
这是用 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::chrono::system_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
我希望输出没有尾随小数。因为它是一个字符串,所以我总是可以截断小数点处的字符串。有更好的方法吗?
只需将 localTimeStamp
的类型更改为 seconds
精度:
std::chrono::local_time<std::chrono::seconds> localTimeStamp;
如果您愿意,还有这个方便的类型别名可以做同样的事情:
std::chrono::local_seconds localTimeStamp;
解析和格式化的精度取决于所使用的 time_point
的精度。
我正在编写一些代码,从用户那里获取一个字符串,并将其格式化为分区时间。解析代码比这个例子复杂一点,但是这样会重现问题。
这是用 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::chrono::system_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
我希望输出没有尾随小数。因为它是一个字符串,所以我总是可以截断小数点处的字符串。有更好的方法吗?
只需将 localTimeStamp
的类型更改为 seconds
精度:
std::chrono::local_time<std::chrono::seconds> localTimeStamp;
如果您愿意,还有这个方便的类型别名可以做同样的事情:
std::chrono::local_seconds localTimeStamp;
解析和格式化的精度取决于所使用的 time_point
的精度。