You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C程序中ctime()函数返回时间错误,偏差达3天

WSL2中C语言time函数输出时间与Windows主机偏差3天的原因分析

问题复现

代码示例:

#include<stdio.h>
#include<time.h>

int main(void){
    time_t now = time(NULL);
    printf("%s", ctime(&now));
    return 0;
}

在Windows 11系统的WSL2环境下,用GCC编译运行上述代码后,输出时间为Wed May 10 19:13:18 2023,但Windows主机实际系统时间为Sat May 13 09:45:37 2023,二者偏差3天,且已排除UTC/本地时间差异问题。

核心原因

  • WSL2虚拟机时钟未同步主机休眠/挂起后的时间:WSL2本质是基于Hyper-V的轻量虚拟机,当Windows主机进入休眠、睡眠或长时间挂起状态时,WSL2的虚拟机会暂停运行,时钟停留在主机休眠前的时间点。主机恢复运行后,WSL2虚拟机不会自动同步主机的最新时间,从而产生时间差。
  • 缺少自动时间同步机制:WSL默认未启用定期同步主机时间的配置,如果主机在WSL未运行期间修改过系统时间(比如手动调整、跨时区切换),WSL启动后不会主动拉取主机的最新时间,导致时间偏差持续存在。
  • Hyper-V虚拟机时钟漂移:Hyper-V虚拟机本身存在一定的时钟漂移问题,当WSL2长期运行后,虚拟系统时钟会逐渐和主机时间产生偏差,且没有自动校准机制来修正。

快速修复方案

临时同步可在WSL终端执行:

sudo hwclock -s

长期自动同步可在WSL的/etc/wsl.conf文件中添加以下配置(若文件不存在则新建):

[boot]
command="hwclock -s"

这样每次WSL启动时都会自动同步主机硬件时钟。

内容的提问来源于stack exchange,提问作者Dabbo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:05:01