用localtime_s()替换 localtime()

在c++开发中,有时候会提示localtime() unsafe,这时候就可以使用localtime_s()来替换。

错误: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。

法一:在文件中针对随后内容关闭警告。(直接关闭警告不理会,但可能会出错!)

#pragma warning(disable : 4996)

法二:用localtime_s()替换

//先看源码
#if __STDC_WANT_SECURE_LIB__
            _Check_return_wat_
            static __inline errno_t __CRTDECL ctime_s(
                _Out_writes_(_SizeInBytes) _Post_readable_size_(26) char*         const _Buffer,
                _In_range_(>=,26)                                   size_t        const _SizeInBytes,
                _In_                                                time_t const* const _Time
                )
            {
                return _ctime64_s(_Buffer, _SizeInBytes, _Time);
            }

            _Check_return_wat_
            static __inline errno_t __CRTDECL gmtime_s(
                _Out_ struct tm*    const _Tm,
                _In_  time_t const* const _Time
                )
            {
                return _gmtime64_s(_Tm, _Time);
            }

            _Check_return_wat_
            static __inline errno_t __CRTDECL localtime_s(
                _Out_ struct tm*    const _Tm,
                _In_  time_t const* const _Time
                )
            {
                return _localtime64_s(_Tm, _Time);
            }
        #endif

浅说一下上面三个函数:

1、ctime_s():将给定时间转换为当地日历,转换为文本表示。

2、gmtime_s():将历元以来的给定时间转换为日历时间。将结果存储在静态存储器中,返回指向该静态存储器的指针。

3、localtime_s():将历元以来的给定时间转换为以本地时间表示的日历时间。将结果存储在静态存储器中,返回指向该静态存储器的指针。

//下面是日期参数
struct tm
{
    int tm_sec;   // seconds after the minute - [0, 60] including leap second
    int tm_min;   // minutes after the hour - [0, 59]
    int tm_hour;  // hours since midnight - [0, 23]
    int tm_mday;  // day of the month - [1, 31]
    int tm_mon;   // months since January - [0, 11]
    int tm_year;  // years since 1900
    int tm_wday;  // days since Sunday - [0, 6]
    int tm_yday;  // days since January 1 - [0, 365]
    int tm_isdst; // daylight savings time flag
};
示例:
//strftime(...)中第三个参数控制格式,可以根据具体需要调整。
//用localtime()获取当前时间
time_t ticks = time(NULL);
struct tm* p_Time = localtime(&ticks);

char c_TimeStamp[64];
memset(c_TimeStamp, 0 ,sizeof(c_TimeStamp));
strftime(c_TimeStamp, sizeof(c_TimeStamp), "%Y-%m-%d %H:%M:%S", p_Time);
cout<<c_TimeStamp<<endl;


//用localtime_s()获取当前时间
auto NowTime = chrono::system_clock::now();        
time_t ticks = chrono::system_closk::to_time_t(NowTime);
struct tm* p_Time = new tm();
localtime_s(p_Time, &ticks);

char c_TimeStamp[64];
memset(c_TimeStamp, 0 ,sizeof(c_TimeStamp));
strftime(c_TimeStamp, sizeof(c_TimeStamp), "%Y-%m-%d %H:%M:%S", p_Time);
cout<<c_TimeStamp<<endl;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值