我想获得当前时间日/月/年小时:分钟:秒 当涉及到这么简单的问题时,C ++似乎非常令人作呕(好吧,它本身就是这样)。
我已经搜遍了互联网,而我所能获得的所有功能或功能都被弃用了。我找到了这样的方式:
std::time_t const now_c = std::time(0);
auto strTime = std::put_time(std::localtime(&now_c), "%F %T");
但是,我需要使用
#pragma warning(disable : 4996)
能够编译它(Visual Studio会说:错误C4996:&#39; localtime&#39;:此函数或变量可能不安全。请考虑使用localtime_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。)< / p>
如何以优雅,有效,不被弃用,高效,合理和C ++的方式获取当前日期?
答案 0 :(得分:2)
std::localtime
不被弃用,仅被微软编译器称为“不安全”,应用此方法以避免
#define _CRT_SECURE_NO_WARNINGS
答案 1 :(得分:1)
如何以优雅,有效,不被弃用,高效,合理和C ++的方式获取当前日期?
以下是使用评论中free, open-source C++11/14 library提到的ArchbishopOfBanterbury执行此操作的方法:
#include "tz.h"
#include <string>
int
main()
{
auto const now = date::make_zoned(date::current_zone(),
std::chrono::system_clock::now());
auto strTime = date::format("%F %T", now);
}
这是线程安全的,并使用现代C ++ 11/14 <chrono>
库作为其基础。这将输出精确度为system_clock::time_point
的时间(VS上为100ns)。如果您希望将其截断为秒,则可以这样完成:
using namespace std::chrono;
using namespace date;
auto const now = make_zoned(current_zone(), floor<seconds>(system_clock::now()));
auto strTime = format("%F %T", now);
如果您希望将当地时间转移到其他地方,只需输入该时区的IANA name代替current_zone()
:
auto const now = make_zoned("Europe/London", floor<seconds>(system_clock::now()));