Linux和Windows时间不一致问题
问题描述
装过双系统或者虚拟机装Linux的人都知道,Linux的时间和Windows往往是不同步的,在编写跨平台程序的时候特别是对时间敏感的代码就带来很大的困扰
解决办法
这个问题可以在Linux下解决
先用命令查看时区
timedatectl
如果系统刚刚装好,没有设置好时区,有可能默认的是America/Los_Angeles
设置时区,Asia/Shanghai
代表UTC东8区时间
timedatectl set-timezone "Asia/Shanghai"
Linux下获取时间
main.cpp
using namespace std;
int main()
{
setenv("TZ", "/usr/share/zoneinfo/Asia/Shanghai", 1);
auto t = time(nullptr);
struct tm tm = *localtime(&t);
printf("time zone : %s -> %s", getenv("TZ"), asctime(&tm));
auto ti = mktime(&tm);
std::cout << "time : " << ti << std::endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(get-time LANGUAGES CXX)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(${PROJECT_NAME} main.cpp)
使用VMware Workstation进行时间同步
如果你是虚拟机用户,你可以在VMware Workstation面板点击虚拟机
-> 设置
-> 选项
-> VMware Tools
设置完重启Linux就会发现时间已经同步好了
Windows下获取时间
中文电脑一般默认UTC东八区时间,如果不是请自行了解怎么设置,以下是示范例程
using namespace std;
inline int get_time(struct timeval *tp, void *tzp)
{
time_t clock;
struct tm tm;
SYSTEMTIME wtm;
GetLocalTime(&wtm);
tm.tm_year = wtm.wYear - 1900;
tm.tm_mon = wtm.wMonth - 1;
tm.tm_mday = wtm.wDay;
tm.tm_hour = wtm.wHour;
tm.tm_min = wtm.wMinute;
tm.tm_sec = wtm.wSecond;
tm. tm_isdst = -1;
clock = mktime(&tm);
tp->tv_sec = clock;
tp->tv_usec = wtm.wMilliseconds * 1000;
return (0);
}
int main()
{
struct timeval tv;
get_time(&tv,NULL);
time_t unix_second = (tv.tv_sec);
return 0;
}
阅读剩余
版权声明:
作者:hywing
链接:https://iotstuff.cn/linux-windows-time-not-sync/
文章版权归作者所有,未经允许请勿转载。
THE END