c++ 如何使用fmt库打印带有小数秒的当前时间

k97glaaz  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(418)

此代码

#include <chrono>
#include <fmt/format.h>
#include <fmt/chrono.h>
...
auto now = std::chrono::system_clock::now();
fmt::print("The time is: {:%Y-%m-%d %H:%M:%S}\n", now);

打印此内容:
时间为:2023年1月2日15时51分23秒
如何让它打印亚秒级精度,例如毫秒?类似于:
时间为:2023年1月2日15时51分23.753秒

qvk1mo1f

qvk1mo1f1#

format page上,你需要类似%Y-%m-%d %H:%M:%S.%e的东西。注意%e%f%F给予你毫秒,微秒和纳秒。不过,这是spdlog
下面是一个简单的例子,我的R包RcppSpdlog通过spdlog访问fmt

> library(RcppSpdlog)
> RcppSpdlog::log_set_pattern("[%Y-%m-%d %H:%M:%S.%f] [%L] %v")
> RcppSpdlog::log_warn("Hello")
[2023-01-02 15:00:49.746031] [W] Hello
> RcppSpdlog::log_set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%L] %v")
> RcppSpdlog::log_warn("World")
[2023-01-02 15:01:02.137] [W] World
>

注意所述的微秒和毫秒显示。

  • 编辑:* 你的例子还有其他问题。这里是一个简化的答案,* 只 * 打印秒,默认情况下,它会小到纳秒(对于我在Linux上的情况):
$ cat answer.cpp
#include <chrono>
#include <fmt/format.h>
#include <fmt/chrono.h>

int main() {
    fmt::print("{:%S}\n", std::chrono::system_clock::now().time_since_epoch());
    exit(0);
}
$ g++ -o answer answer.cpp -lfmt
$ ./answer 
02.461241690
$
  • 编辑2:我认为你必须分两步来做-- YMD和HM,然后是高分辨率秒。下面是一个工作示例,使用Ubuntu上的fmt版本9.0:
#include <chrono>
#include <fmt/format.h>
#include <fmt/chrono.h>

int main() {
    auto now = std::chrono::system_clock::now();
    auto sse = now.time_since_epoch();
    fmt::print("{:%FT%H:%M:}{:%S}\n", now, sse);
    exit(0);
}

为此我得到

$ g++ -o answer answer.cpp -lfmt; ./answer 
2023-01-02T16:26:17.009359309
$

相关问题