C语言获取系统日期时间(精确到毫秒)
下面的方法最为方便实用,特记录。
使用Windows.h
优点:能精确到毫秒级;缺点:使用了windows API
#include <Windows.h>
#include <stdio.h>
int main()
{
SYSTEMTIME sys;
GetLocalTime(&sys);
printf("%4d年%02d月%02d日\t%02d:%02d:%02d.%03d\t星期%1d\n", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds, sys.wDayOfWeek);
return 0;
}
执行结果:
2016年09月20日 09:27:41.976 星期2
请按任意键继续. . .
一个比较low的方法
优点:利用系统函数,还能修改系统时间
//此文件必须是c++文件
#include<stdlib.h>
#include<iostream>
using namespace std;
void main()
{
system("time");
}
执行结果:
当前时间: 9:28:20.28
输入新时间:
C语言获取操作系统信息
过时的方法
貌似到目前VS2015上只能检测到win8.1
#include <windows.h>
#include <VersionHelpers.h>
#include <iostream>
using namespace std;
int main(void)
{
// 是否大于等于 XP
if (IsWindowsXPOrGreater())
cout << ">= XP" << endl;
else
cout << " < XP" << endl;
// 是否大于等于 XP SP1
if (IsWindowsXPSP1OrGreater())
cout << ">= XP SP1" << endl;
else
cout << " < XP SP1" << endl;
// 是否大于等于 XP SP2
if (IsWindowsXPSP2OrGreater())
cout << ">= XP SP2" << endl;
else
cout << " < XP SP2" << endl;
// 是否大于等于 XP SP3
if (IsWindowsXPSP3OrGreater())
cout << ">= XP SP3" << endl;
else
cout << " < XP SP3" << endl;
// 是否大于等于 Vista
if (IsWindowsVistaOrGreater())
cout << ">= Vista" << endl;
else
cout << " < Vista" << endl;
// 是否大于等于 Vista SP1
if (IsWindowsVistaSP1OrGreater())
cout << ">= Vista SP1" << endl;
else
cout << " < Vista SP1" << endl;
// 是否大于等于 Vista SP2
if (IsWindowsVistaSP1OrGreater())
cout << ">= Vista SP2" << endl;
else
cout << " < Vista SP2" << endl;
// 是否大于等于 Win8
if (IsWindows8OrGreater())
cout << ">= Win8" << endl;
else
cout << " < Win8" << endl;
// 是否大于等于 Win8.1
if (IsWindows8Point1OrGreater())
cout << ">= Win8.1" << endl;
else
cout << " < Win8.1" << endl;
// 是否为服务器版
if (IsWindowsServer())
cout << "服务器版" << endl;
else
cout << "非服务器版" << endl;
// 以上的函数都是通过IsWindowsVersionOrGreater实现的
// Windows 2000的版本号为5.0,所以我们也可以直接通过版本号判断
if (IsWindowsVersionOrGreater(5, 0, 0))
cout << ">= Win 2000" << endl;
else
cout << " < Win 2000" << endl;
return 0;
}
详细版本语法信息参考Version Helper functions(msdn.microsoft.com)
执行结果:本人电脑(win10.0.14393)
>= XP
>= XP SP1
>= XP SP2
>= XP SP3
>= Vista
>= Vista SP1
>= Vista SP2
>= Win8
< Win8.1
非服务器版
>= Win 2000
请按任意键继续. . .
过时的方法
貌似到目前VS2015上只能检测到win8
//应该还有一个参数OSVERSIONINFOEX.wProductType用于检测是否是服务器版本,在win8.1,win10上测试失败就不深究了…(win10也被检测为win8)
#include <iostream>
#include <Windows.h>
char *GetVersionInfo()
{
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (!GetVersionEx(&osvi)) {
return NULL;
}
//判断版本
if (osvi.dwMajorVersion == 5) {
switch (osvi.dwMinorVersion) {
case 0:
return "Windows 2000";
case 1:
return "Windows XP";
case 2:
return "Windows Server 2003";
default:
return "Unknown System";
}
}
else if (osvi.dwMajorVersion == 6) {
switch (osvi.dwMinorVersion) {
case 0:
return "Windows Vista";
case 1:
return "Windows 7";
case 2:
return "Windows 8";
default:
return "Unknown System";
}
}
else {
return "Unknown System";
}
}
int main()
{
std::cout << GetVersionInfo() << std::endl;
}
详细版本序号信息参考OSVERSIONINFOEX structure(msdn.microsoft.com)
更多此方法可以参考GetVersion和GetVersionEx
遇到的问题,被声明为已否决
解决方法:项目的配置属性-C/C++-常规-SDL检查置为“否(/sdk-)”。
一个比较low的方法
优点:简单粗暴;缺点:功能简陋
//此文件必须是c++文件
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
system("Ver");
return 0;
}
执行结果:
Microsoft Windows [版本 10.0.14393]
请按任意键继续. . .