Ce face os.Chtimes
os.Chtimes setează două date ale fișierului: atime (ultimul acces) și mtime (ultima modificare), ca touch -t din terminal. Data modificării se citește apoi cu info.ModTime().
Un time.Time gol (time.Time{}) lasă data respectivă neschimbată. Sistemul de fișiere poate rotunji timpul (de exemplu la secunde).
Parametri
| Parametru | Descriere |
|---|---|
name |
Calea fișierului. |
atime |
Data ultimului acces. |
mtime |
Data ultimei modificări. |
Ce returnează
nil la succes sau o eroare *fs.PathError.
Exemple
Exemplul 1: Setarea datei de modificare
package main
import (
"fmt"
"os"
"time"
)
func main() {
os.WriteFile("poza.jpg", []byte("..."), 0o644)
t := time.Date(2024, time.August, 15, 18, 30, 0, 0, time.UTC)
if err := os.Chtimes("poza.jpg", t, t); err != nil {
fmt.Println("eroare:", err)
return
}
info, _ := os.Stat("poza.jpg")
fmt.Println("modificat:", info.ModTime().UTC().Format("2006-01-02 15:04"))
}
Rezultat
modificat: 2024-08-15 18:30
Exemplul 2: Sortarea fișierelor după dată
Dăm fiecărui raport o dată fixă, apoi le sortăm de la cel mai nou cu slices.SortFunc.
package main
import (
"fmt"
"os"
"path/filepath"
"slices"
"time"
)
func main() {
os.Mkdir("rapoarte", 0o755)
date := map[string]time.Time{
"ianuarie.csv": time.Date(2025, time.February, 1, 9, 0, 0, 0, time.UTC),
"februarie.csv": time.Date(2025, time.March, 1, 9, 0, 0, 0, time.UTC),
"martie.csv": time.Date(2025, time.April, 1, 9, 0, 0, 0, time.UTC),
}
for nume, t := range date {
cale := filepath.Join("rapoarte", nume)
os.WriteFile(cale, []byte("date"), 0o644)
os.Chtimes(cale, t, t)
}
intrari, _ := os.ReadDir("rapoarte")
var fisiere []os.FileInfo
for _, e := range intrari {
info, _ := e.Info()
fisiere = append(fisiere, info)
}
slices.SortFunc(fisiere, func(a, b os.FileInfo) int { return b.ModTime().Compare(a.ModTime()) })
for _, f := range fisiere {
fmt.Println(f.ModTime().UTC().Format("2006-01-02"), f.Name())
}
}
Rezultat
2025-04-01 martie.csv
2025-03-01 februarie.csv
2025-02-01 ianuarie.csv
Exemplul 3: Doar data modificării
time.Time{} pentru atime lasă data accesului cum era.
package main
import (
"fmt"
"os"
"time"
)
func main() {
os.WriteFile("nota.txt", []byte("..."), 0o644)
noua := time.Date(2023, time.December, 24, 12, 0, 0, 0, time.UTC)
fmt.Println(os.Chtimes("nota.txt", time.Time{}, noua))
info, _ := os.Stat("nota.txt")
fmt.Println(info.ModTime().UTC())
}
Rezultat
<nil>
2023-12-24 12:00:00 +0000 UTC
Greșeli frecvente
- Compari datele fără să ții cont de fusul orar.
ModTime()e în ora locală; pentru comparații și afișări stabile folosește.UTC()sau metodaEqual.
Comenzi înrudite
os.File.Stat: Returnează informații despre fișierul deschis: nume, dimensiune, drepturi, data modificării, dacă e director.os.Chmod: Schimbă drepturile de acces (citire, scriere, execuție) ale unui fișier sau director.os.Truncate: Schimbă dimensiunea unui fișier: taie ce depășește sau completează cu octeți zero.