2014-05-02 29 views
3

我試圖格式化一系列的日期,例如:與golang時間包個位數小時失去0

  • 2013年3月12日,下午3點樣子:2013-03-12-15.txt
  • 三月12日,2013年,凌晨4點樣子:2013-03-12-4.txt

使用golang和Time

package main 

import (
    "time" 
    "fmt" 
) 

const layout = "2006-01-02-15.txt" 

func main() { 
    t := time.Date(2013, time.March, 12, 4, 0, 0, 0, time.UTC) 
    fmt.Println(t.Format(layout)) 
} 

不幸的是在前面加一個零個位數小時:2013-03-12-04.txt

有沒有達到期望的輸出習慣的方法,或者我必須調整自己與字符串包的東西嗎?

在此先感謝您的幫助!

回答

6

如果你需要24小時制和不希望領先零hour < 10我只看到一個自定義字符串格式:

date := fmt.Sprintf("%d-%d-%d-%d", t.Year(), t.Month(), t.Day(), t.Hour()) 

當然不是慣用的方式來格式化圍棋的日期。

更新(感謝您的評論):

t := time.Now() 
date := fmt.Sprintf("%s-%d.txt", t.Format("2006-01-02"), t.Hour()) 
fmt.Println(date) 
+1

您仍然可以使用'Time.Format'格式化大部分內容。 – nemo

+0

@nemo很好的建議!我將它添加到答案中。 – Sebastian

+0

如果你喜歡它,你可以提高我的答案;) – nemo

4

僅使用Time.Format來設置年/月的格式並自己設置時間。

package main 

import (
    "fmt" 
    "time" 
) 

const layout = "2006-01-02-%d.txt" 

func main() { 
    t := time.Date(2013, time.March, 12, 4, 0, 0, 0, time.UTC) 
    f := fmt.Sprintf(t.Format(layout), 4) 

    fmt.Printf(f) 
} 

Click to play

你可以看到編號轉換表in the source code of format.go。相關部分:

const (
// ... 
    stdHour     = iota + stdNeedClock // "15" 
    stdHour12          // "3" 
    stdZeroHour12         // "03" 
// ... 
) 

有沒有這樣的事情stdZeroHour,所以stdHour無可奈何的行爲。

+1

這創造一個更大的問題,因爲上午和下午的時間都沒有更多的差異化,就像在http://play.golang.org/p/3yI7xiCpjl沒有保持24小時格式剛剛失去0的方法? – mazieres

+0

你當然是對的。然後,我沒有看到如何用'Time.Format'完成這個工作,除了格式化所有的東西而不是一小時,並且附加小時。 – nemo

+0

相應地更新了我的答案。 – nemo