Linux和Windows时间不一致问题
问题描述
装过双系统或者虚拟机装Linux的人都知道,Linux的时间和Windows往往是不同步的,在编写跨平台程序的时候特别是对时间敏感的代码就带来很大的困扰
解决办法
这个问题可以在Linux下解决
先用命令查看时区
timedatectl
如果系统刚刚装好,没有设置好时区,有可能默认的是America/Los_Angeles
设置时区,Asia/Shanghai
代表UTC东8区时间
timedatectl set-timezone "Asia/Shanghai"
Linux下获取时间
main.cpp
#include <iostream> #include <ctime> 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东八区时间,如果不是请自行了解怎么设置,以下是示范例程
#include <iostream> #include <windows.h> #include <ctime> 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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)