Golang 按日期和时间查找最近的文件

标签 go time comparison

我不确定我这样做是否正确,但最终我想在目录中找到文件的最近修改日期并返回文件名。到目前为止,我的代码如下。有人可以帮我提供比这更有效的解决方案吗?我真的有一种感觉,这是 super hacky。我正在做的是获取日期并删除

package main

import (
    "fmt"
    "io/ioutil"
    "os"
    "strconv"
    "strings"
)

func main() {
    dir := "C:\\temp\\"
    files, _ := ioutil.ReadDir(dir)
    for _, f := range files {
        fi, _ := os.Stat(dir + f.Name())
        s := strings.Split(fi.ModTime().Format("2006-01-02 15.04.05.000"), " ")

        fdate, err := strconv.Atoi(strings.Replace(s[0], "-", "", -1))
        if err != nil {
            fmt.Println(err)
        }

        ftime, err := strconv.Atoi(strings.Replace(s[1], ".", "", -1))
        if err != nil {
            fmt.Println(err)
        }
        fmt.Println(fi.Name(), fdate+ftime)
    }

}

最佳答案

注重细节和效率。检查错误。你要求文件所以跳过目录和其他东西。允许多个文件具有相同的修改时间戳(例如,Windows 文件时间的分辨率最多为 100 纳秒)。您已经有了 ModTime(),所以不要调用 os.Stat()。直接使用 time.Time 方法。等等。

例如,

package main

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

func main() {
    dir := `C:\temp\` // Windows directory
    files, err := ioutil.ReadDir(dir)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
    var modTime time.Time
    var names []string
    for _, fi := range files {
        if fi.Mode().IsRegular() {
            if !fi.ModTime().Before(modTime) {
                if fi.ModTime().After(modTime) {
                    modTime = fi.ModTime()
                    names = names[:0]
                }
                names = append(names, fi.Name())
            }
        }
    }
    if len(names) > 0 {
        fmt.Println(modTime, names)
    }
}

关于Golang 按日期和时间查找最近的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45578172/

相关文章:

go - sync.Once.Do() 使用 CompareAndSwapInt32

go - cmd 行参数字符串。包含与硬编码参数不同的行为

sql - Where 子句中的 Oracle DateTime?

javascript - 在 JavaScript 中比较两个数字,如果它们是 double 以及 == 或 === 的使用呢?

json - 如何创建一个将 json 字符串转换为 golang 结构的通用函数?

regex - 戈兰正则表达式 : FindAllStringSubmatch to []string

java - Joda-time DateTime.withTimeAtStartOfDay() 在亚洲/德黑兰时区的日期 (2036,3,21) 中产生错误结果

php - 跨 PHP、MySQL 等管理日期的最佳方式是什么?

content-management-system - wiki 和 CMS 之间有什么区别

haskell - 拥抱、Yhc 和 GHCi 之间的差异