gpt4 book ai didi

linux - Go: os.Stat ModTime 显示不正确的值

转载 作者:IT王子 更新时间:2023-10-29 01:46:09 24 4
gpt4 key购买 nike

我试图在不同的操作系统中获得一致的文件修改时间。我正在创建一个文件,然后使用 info := os.Stat(file) 然后使用 info.ModTime()

在 Windows 上,这看起来符合预期 - 文件修改时间现在等于。
在 Linux 上,该文件看起来像是在过去创建的(准确地说是过去 12 秒)。

我应该提到我的 Linux 是一个虚拟机,使用 this vagrant box .

完整的脚本及其结果如下。

package main

import (
"fmt"
"io/ioutil"
"os"
"time"
)

func main() {
fmt.Println("Started :", time.Now())
ioutil.WriteFile("somefile.txt", []byte("hello"), 0666)
fi, _ := os.Stat("somefile.txt")
fmt.Println("ModTime :", fi.ModTime())
fmt.Println("Now :", time.Now())
fmt.Println("Time Since:", time.Since(fi.ModTime()).Seconds())
}

Windows 结果(如预期)

Started   : 2014-10-16 16:15:54.3861206 +0300 IDT
ModTime : 2014-10-16 16:15:54.3880908 +0300 IDT
Now : 2014-10-16 16:15:54.3880908 +0300 IDT
Time Since: 0

Linux 结果(过去 12 秒)

Started   : 2014-10-16 13:15:23.511700545 +0000 UTC
ModTime : 2014-10-16 13:15:11.1473256 +0000 UTC
Now : 2014-10-16 13:15:23.514631479 +0000 UTC
Time Since: 12.367389917

任何关于我遗漏的帮助都会很棒。

编辑:
Execution on Travis不会重现错误

最佳答案

如果您没有运行 NTP 客户端来同步虚拟机,它们的时钟就会不同步,这是出了名的。

如果您的工作目录在实际主机本地,并由 Vagrant 挂载到 VM(这在进行开发时很常见),则主机文件系统将确定修改时间。如果 VM 和您的主机时钟相距足够远,您将准确地观察到这种行为。

同时在主机和 VM 系统上运行 date 以计算出时钟相差多远。

关于linux - Go: os.Stat ModTime 显示不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26405645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com