我试图在操作系统中一致地获得文件修改时间。
我正在创建一个文件,然后使用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不会重现错误
答案 0 :(得分:1)
如果您没有运行NTP客户端来同步它,则虚拟机因时钟不同步而臭名昭着。
如果您的工作目录是实际主机的本地目录,并由Vagrant挂载到VM(这在开发时很常见),则主机文件系统将确定修改时间。如果VM和您的主机时钟相距足够分开,您将会发现这种情况。
在主机和VM系统上同时运行date
以确定时钟之间的距离。