$B2::create(array_merge(request()->all(), ['column9' => 'text']));
为什么我会收到警告
警告C4996:'localtime':此函数或变量可能不安全。请考虑使用localtime_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。
有没有其他方式可以节省时间[小时:分钟:秒],是否可以将string GetTime()
{
time_t Timev;
struct tm * TimeInformation;
time(&(time_t)Timev);
(tm*)TimeInformation = localtime(&(time_t)Timev);
char Timec[100];
strftime((char*)Timec, 100, "[%X]:", (tm*)TimeInformation);
string GetTimex((char*)Timec);
return GetTimex;
};
等代码缩短为int abc; abc=123
?
答案 0 :(得分:4)
如果您愿意安装Howard Hinnant的免费开源tz library,那么GetTime()
可以简化为:
#include "tz.h"
#include <string>
std::string
GetTime()
{
using namespace std::chrono;
using namespace date;
return format("[%X]:", make_zoned(current_zone(), system_clock::now()));
}
这只是我的输出:
[10:42:32]:
以下是installation directions(包括Windows版)。
答案 1 :(得分:2)
您可以使用this example:
#include <iostream>
#include <iomanip> // std::put_time
#include <ctime> // std::localtime, std::time, std::time_t, std::gmtime
int main()
{
std::time_t t = std::time(nullptr);
std::cout << "UTC: " << std::put_time(std::gmtime(&t), "%X") << '\n';
std::cout << "local: " << std::put_time(std::localtime(&t), "%X") << '\n';
}
可能的输出:
UTC: 14:18:02
local: 14:18:02
然后你的GetTime
会:
std::string GetTime()
{
std::time_t t = std::time(nullptr);
std::stringstream ss;
ss << std::put_time(std::localtime(&t), "[%X]");
return ss.str();
}
答案 2 :(得分:1)
localtime有一个静态的内部存储,这意味着它不是线程安全的。大多数系统都有线程安全的替代品,但它们不是标准库的一部分。例如,Windows具有localtime_s,Linux / Posix具有localtime_r。 std库函数std :: strftime和std :: put_time可能是更安全的替代方法,如this article
中所述答案 3 :(得分:1)
std::localtime()
(当它成功时)的返回值是
指向静态内部
std::tm
对象的指针
此外,
结构可以在
std::gmtime
,std::localtime
和std::ctime
之间共享,也可以在每次调用时覆盖。
(来自cppreference )
这意味着如果您在其他线程中使用这些函数中的任何一个,则可能会出现数据竞争。如果您确定没有其他线程正在使用任何这些函数(可能是因为您的程序是单线程的),那么您可以放心地忽略该警告。
您的编译器似乎建议您使用其实现定义的替代方案 - 您是否愿意接受,但您可能需要考虑隔离随后引入的任何平台依赖项。