C ++获取当前日期

时间:2016-06-17 17:01:59

标签: c++ date get

我想获得当前时间日/月/年小时:分钟:秒 当涉及到这么简单的问题时,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 ++的方式获取当前日期?

2 个答案:

答案 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()));
相关问题