首页 > 系统相关 >Linux和Windows时间不一致问题

Linux和Windows时间不一致问题

时间:2024-03-23 22:36:52浏览次数:25  
标签:Windows Linux tv tm 一致 time include wtm

问题描述

装过双系统或者虚拟机装Linux的人都知道,Linux的时间和Windows往往是不同步的,在编写跨平台程序的时候特别是对时间敏感的代码就带来很大的困扰

解决办法

这个问题可以在Linux下解决

先用命令查看时区

timedatectl 

如果系统刚刚装好,没有设置好时区,有可能默认的是America/Los_Angeles

image

设置时区,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

image

设置完重启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;
}

标签:Windows,Linux,tv,tm,一致,time,include,wtm
From: https://www.cnblogs.com/hywing/p/18091808

相关文章

  • Windows库链接报错
    问题回溯今天拿到别人已经编译好的库,发现在链接的时候出现了报错[9/912.7/sec]LinkingCXXsharedmodulebin\plugins\AsensingPlugin\AsensingPlugin.dllFAILED:bin/plugins/AsensingPlugin/AsensingPlugin.dllcmd.exe/C"cd.&&"C:\ProgramFiles\CMake\bin\cmake.e......
  • Windows服务注册-极语言版
    以下代码请新建工程-初级程序-粘贴窗体对象-粘贴代码模块-保存-关闭程序-再打开。在使用编译好的exe代码之前,请先在以管理员模式运行的cmd窗口中执行以下语句:让任意的cmd窗口都可执行sc命令,让sc等命令不需要以管理员权限执行cmd窗口,执行完以下代码之后,需要重启电脑regadd"H......
  • 实验:基于Red Hat Enterprise Linux系统在终端使用vim进行拷贝、删除、查找、替换、保
    目录一.实验目的二.实验内容三.实验设计描述及实验结果        一.vim文本编译器模式切换:    命令模式:        输入模式:        末行模式:        二.复制、删除:        三.查找字符串:        四.替换:......
  • Linux线程互斥
    文章目录Linux线程互斥mutex接口初始化互斥量销毁互斥量加锁和解锁加锁解锁的原理使用示例Linux线程互斥进程线程间的互斥相关背景概念临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有......
  • linux下的进程(二)
    进程间的通信目录进程间的通信信号信号由谁产生?信号的处理信号的捕获信号的发送发送多个信号信号集阻塞式等待信号信号什么是信号?信号是给程序提供一种可以处理异步事件的方法,它利用软中断实现。不能定义信号,所有信号都是由系统预定义的信号由谁产生?1.由sh......
  • 批处理脚本来将 Windows 10 的虚拟内存设置为自动管理所有驱动器的分页文件大小
    批处理脚本来将Windows10的虚拟内存设置为自动管理所有驱动器的分页文件大小:CopyCode@echooffREM将所有驱动器的分页文件大小设置为自动管理REM禁用虚拟内存wmiccomputersystemwherename="%computername%"setAutomaticManagedPagefile=Falsewmicpagefilesetw......
  • 如何实现Mac与Windows共享文件夹?
    本人使用系统是macos13.1和win11系统亲测使用!第一步确保两台电脑链接相同的WIFI这一步非常关键第二步Windows电脑创建共享文件夹并设置文件共享首先在Window端桌面创建一个共享文件夹。(也可以自己更改需要存储的路径)接着右键属性--选择共享--高级共享--勾选共......
  • 把 Windows 装进 Docker 容器里
    本篇文章聊聊如何在Docker里运行Windows操作系统,WindowsinDockerContainer(WinD)。写在前面我日常使用macOS和Ubuntu来学习和工作,但是时不时会有Windows使用的场景,不论是运行某个指定的软件,还是要做一些跨平台软件的功能验证。在去年开源 soulteary/docker-chatgp......
  • SH文件从Window拷贝到Linux运行失败
    1.问题现象bash:./startup.sh:/bin/bash^M:解释器错误:没有那个文件或目录这个错误通常发生在尝试在Unix-like系统中执行脚本时,脚本文件的行尾结束符是Windows风格的CRLF(回车+换行,即\r\n),而不是Unix风格的LF(换行,即\n)。/bin/bash^M说明了这个问题,^M是字符\r的控制台输出表......
  • shell检测文件是windows格式还是unix
    Shell可以检测文件是Windows格式还是Unix格式。有多种方法可以实现这一目的。一种常用的方法是使用cat命令结合-A选项来查看文件的特殊字符。在Unix或Linux系统中,如果文件的行尾是以^M$结束的,那么它就是Windows(DOS)格式,因为^M代表回车符(\r)。而如果行尾只是以$结束,那么它就是Unix格......