2014-09-25 2 views
1

Я хотел бы переименовать некоторые файлы на основе даты модификации.Go time.Format wrong month

Когда я использую метод time.Format, чтобы получить нужную строку, в основном в этом формате YYYY-MM-DD_HH-MM-SS, день имеет трейлинг 0.

Есть ли что-нибудь, что я делаю неправильно здесь?

 
    package main 

    import (
     "time" 
     "fmt" 
    ) 

    func main() { 

     loc, _ := time.LoadLocation("Europe/Berlin") 

     const layout = "2006-01-20_15-04-05" 

     t := time.Date(2013, 07, 23, 21, 32, 39, 0, loc) 
     fmt.Println(t) 
     fmt.Println(t.Format(layout)) 
    } 



click to play

Выход:

2013-07-23 21:32:39 +0200 CEST 
2013-07-230_21-32-39
+0

Месяц или день? Я вижу конечный «0» в день. Или вы хотите, чтобы ваш месяц был '7', а не' 07'? –

+2

Кстати, будьте осторожны с использованием ведущих нулей в качестве части ваших числовых литералов в ваших программах Go. Я увидел буквальную '07' в вашей программе и инстинктивно вздрогнул. Если вы не будете осторожны, вы можете случайно использовать ** восьмеричную **. https://golang.org/ref/spec#Integer_literals. В приведенном выше случае это не технически проблема, но в целом, используйте восьмеричные целочисленные литералы только тогда, когда вы действительно имеете в виду восьмеричные. – dyoo

+0

@ Ainar-G Извините, конечно, я имею в виду трейлинг 0 в день. – fortrieb

ответ

5

Ваш layout не использует эталонную дату: изменить его на "2006-01-02_15-04-05"

При использовании "2006-01-20_15-04-05", форматировщик увидеть 2, и использует это в течение дня, а затем сохраняет дополнительные 0, так как он не соответствует какой-либо части контрольной даты.