localtime和localtime_s

主要作用

都是将std::time_t类型数据转换为 std::tm类型

代码示例:

// localtime示例
// 使用high_resolution_clock获取当前时间点
auto now = std::chrono::system_clock::now();  
// 转换为time_t格式,便于转换为本地时间
std::time_t time_now = std::chrono::system_clock::to_time_t(now);
std::cout<<std::put_time(std::localtime(&time_now),"%Y%m%d")<<std::endl;
// localtime_s示例
// 使用high_resolution_clock获取当前时间点
auto now = std::chrono::system_clock::now();
std::tm tm;
if(localtime_s(&tm, &time_now) != 0)
{
  std::cout<<"error"<<std::endl;
  return;
}else {
  // 输出本地时间
  std::cout << "当前本地时间为: " << std::asctime(&tm);
}
std::cout<< "localtime_s:: "<<std::put_time(&tm, "%Y%m%d") <<std::endl;

函数原型

// localtime 函数原型
struct tm* localtime(const time_t* timeptr);

// localtime_s 函数原型
errno_t localtime_s(struct tm *_Pt, const time_t *_Time);

两者的区别

localtime函数是线程不安全的,而localtime_s是微软提供的线程安全版本的localtime。
在具体功能上,两者没有区别,都是将time_t类型变量转化为 tm 类型。
localtime_s能够避免缓冲区溢出风险,因为函数需要使用者提供一个指向tm结构体的指针,这个结构体是用户自己分配的,所以能够知道它的来源,不会被其他代码覆盖。

注意事项

localtime_s 函数返回 errno_t 类型的值,如果函数成功,则返回 0;如果发生错误,则返回一个非零值,并且可以设置全局变量 errno 来指示错误的原因。因此,在调用 localtime_s 后检查返回值是很重要的。

本笔记记录原因

在使用localtime函数时,vs报错。
报错内容:

错误    C4996    'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.   

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直在找资料的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值