获取系统时间:
#include <stdio.h>
#include <string.h>
#include <time.h>
void getlocaltime()
{
time_t nowtime;
struct tm timeinfo;
time(&nowtime);
localtime_s(&timeinfo, &nowtime);
int year, month, day, hour, min, sec;
year = 1900 + timeinfo.tm_year;
month = 1 + timeinfo.tm_mon;
day = timeinfo.tm_mday;
hour = timeinfo.tm_hour;
min = timeinfo.tm_min;
sec = timeinfo.tm_sec;
printf("系统时间:%4d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, min, sec);
}
int main(int argc, char *argv[])
{
getlocaltime();
return(0);
}
结果如下:
处理C4996编译器报错:
(严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C4996 'gmtime': This function or variable may be unsafe. Consider using gmtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 获取系统时间 C:\Users\zzh\source\repos\获取系统时间\获取系统时间.c 40
)
原因:
你的代码使用标记为“已弃用”的函数、类成员、变量或 typedef。 符号是使用 __declspec(deprecated) 修饰符或 C++14 [[deprecated]] 属性弃用的。 实际的 C4996 警告消息由声明的 deprecated
修饰符或属性指定。
不安全的 CRT 库函数
This function or variable may be unsafe. Consider using
safe-version
instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Microsoft 弃用了一些 CRT 和 C++ 标准库函数与全局变量,因为有更安全的版本可用。 大多数已弃用的函数允许在不经过检查的情况下对缓冲区进行读取或写入访问。 滥用这些函数可能导致严重的安全问题。 编译器会发出对这些函数的弃用警告,并建议首选函数。
若要解决此问题,我们建议改用函数或变量 safe-version
。 有时,出于可移植性或后向兼容性原因,你不能这样做。 请仔细验证你的代码中是否不允许发生缓冲区覆盖或过度读取。 然后可以关闭警告。
若要在 CRT 中关闭这些函数的弃用警告,请定义 _CRT_SECURE_NO_WARNINGS
。
若要关闭有关弃用的全局变量的警告,请定义 _CRT_SECURE_NO_WARNINGS_GLOBALS
。
有关这些已弃用函数和全局变量的详细信息,请参阅 CRT 中的安全功能和安全库:C++ 标准库。
处理办法1:
在 Visual Studio 中关闭针对项目的警告
若要关闭 Visual Studio IDE 中整个项目的警告,请执行以下操作:
-
打开项目的“属性页”对话框。 有关如何使用“属性页”对话框的信息,请参阅属性页。
-
选择“配置属性”>“C/C++”>“高级”属性页。
-
编辑“禁用特定警告”属性以添加
4996
。 选择“确定”以应用更改。
处理办法2:
还可以使用预处理器宏来关闭库中使用的弃用警告的某些特定类。 下面介绍了这些宏。
若要在 Visual Studio 中定义预处理器宏,请执行以下操作:
-
打开项目的“属性页”对话框。 有关如何使用“属性页”对话框的信息,请参阅属性页。
-
展开“配置属性”>“C/C++”>“预处理器”。
-
在“预处理器定义”属性中,添加宏名称。 选择“确定” 进行保存,然后重新生成项目。
若要仅在特定的源文件中定义宏,请在包含头文件的任何行之前添加一行(例如 #define EXAMPLE_MACRO_NAME
)。
#define _CRT_SECURE_NO_WARNINGS//处理办法2
#include <stdio.h>
#include <string.h>
#include <time.h>
void getlocaltime()
{
//time_t nowtime;
//struct tm timeinfo;
//time(&nowtime);
//localtime_s(&timeinfo, &nowtime);
//int year, month, day, hour, min, sec;
//year = 1900 + timeinfo.tm_year;
//month = 1 + timeinfo.tm_mon;
//day = timeinfo.tm_mday;
//hour = timeinfo.tm_hour;
//min = timeinfo.tm_min;
//sec = timeinfo.tm_sec;
//printf("系统时间:%4d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, min, sec);
time_t timep;
time(&timep); //获取从1970至今过了多少秒,存入time_t类型的timep
printf("%s", ctime(&timep));//用ctime将秒数转化成字符串格式,输出:Thu Feb 28 14:14:17 2019
return 0;
}
void getlocaltimensec()
{
struct timespec ts;
timespec_get(&ts, TIME_UTC);
char buff[100];
strftime(buff, sizeof buff, "%D %T", gmtime(&ts.tv_sec));
printf("Current time: %s.%09ld UTC\n", buff, ts.tv_nsec);
}
int main(int argc, char* argv[])
{
getlocaltime();
getlocaltimensec();
return(0);
}
输出结果:
Wed Jan 31 23:16:21 2024
Current time: 01/31/24 15:16:21.417281000 UTC