在 MacOS 上C++:显示日期和时间问题

C++ on MacOS: show date and time issue

本文关键字:日期 时间 问题 显示 MacOS C++      更新时间:2023-10-16

我买了一台MacBook Pro,过去两天我一直在使用MacOS。我一直在尝试编写这个C++代码,使用chronoctime库输出日期和时间。 这段代码在我的Windows机器和CentOS7服务器上工作得很好。但是,在我的MacBook Pro上,它无法编译。 这是我尝试使用 G++ 编译时收到的错误消息:

main.cpp:19:61: error: no viable conversion from 'time_point<std::__1::chrono::steady_clock,
duration<[...], ratio<[...], 1000000000>>>' to 'const
time_point<std::__1::chrono::system_clock, duration<[...], ratio<[...], 1000000>>>'
std::time_t date = std::chrono::system_clock::to_time_t(now);
^~~
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/chrono:1340:28: note: candidate constructor
(the implicit copy constructor) not viable: no known conversion from
'std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long,
std::__1::ratio<1, 1000000000> > >' to 'const
std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long,
std::__1::ratio<1, 1000000> > > &' for 1st argument
class _LIBCPP_TEMPLATE_VIS time_point
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/chrono:1340:28: note: candidate constructor
(the implicit move constructor) not viable: no known conversion from
'std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long,
std::__1::ratio<1, 1000000000> > >' to 'std::__1::chrono::time_point<std::__1::chrono::system_clock,
std::__1::chrono::duration<long long, std::__1::ratio<1, 1000000> > > &&' for 1st argument
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/chrono:1359:5: note: candidate template
ignored: could not match 'std::__1::chrono::system_clock' against 'std::__1::chrono::steady_clock'
time_point(const time_point<clock, _Duration2>& t,
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/chrono:1566:53: note: passing argument to
parameter '__t' here
static time_t     to_time_t  (const time_point& __t) _NOEXCEPT;
^
1 error generated.
basavyr@Roberts-MacBook-Pro simpleTest %

这是代码:

void getTime()
{
auto now = std::chrono::high_resolution_clock::now();
std::time_t date = std::chrono::system_clock::to_time_t(now);
std::cout << std::ctime(&date);
}
int main()
{
getTime();
}

我认为这个问题与MacOS正在使用CLANG编译器有关? 任何想法如何解决这个问题?

谢谢!

只有当std::high_resolution_clockstd::system_clock相同类型时,您的代码才可能起作用。不能保证不同时钟的时间点相同或可转换。

对于转换为只有秒分辨率的time_tsystem_clock将完全足够:

void getTime()
{
auto now = std::chrono::system_clock::now();
std::time_t date = std::chrono::system_clock::to_time_t(now);
std::cout << std::ctime(&date);
}
int main()
{
getTime();
}