C 获得当前日期

C++ get current date

本文关键字:当前日期      更新时间:2023-10-16

我想获得当前时间/月/年小时:分钟:第二当涉及到一个简单的问题时,C 似乎很令人作呕(嗯,这本身就是)。

我已经搜索了整个Internet,而我所能获得的只是弃用的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:'localtime':此函数或变量可能不安全。考虑使用localtime_s,而不是localtime_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。)

。) 。)

如何以优雅,有效的,不弃用,高效,明智和C 方式获得当前日期?

std::localtime未弃用,仅被Microsoft编译器称为"不安全",将其应用于避免

#define _CRT_SECURE_NO_WARNINGS

我如何以优雅,有效的,不弃用,高效,明智和C 方式获得当前日期?

这是您使用免费的,开源的C 11/14图书馆在评论中提到的:

#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名称代替current_zone()

auto const now = make_zoned("Europe/London", floor<seconds>(system_clock::now()));