如何在Go中格式化此字符串

时间:2016-07-29 17:32:37

标签: string go

这是我的程序

package main

import "fmt"
import "time"
import "strconv"
import "strings"

func main() {

    t := time.Date(2016, 10, 30, 14, 0, 0, 0, time.UTC) 


    year, month, day := t.Date()          
    hr := t.Hour()  

    s := []string{strconv.Itoa(year), strconv.Itoa(int(month)), strconv.Itoa(day)}
    date := strings.Join(s, "")

    s = []string{date, strconv.Itoa(hr)}
    date = strings.Join(s, "_")
    fmt.Println(date)       

}

Go Playground

输出

20161030_14

如果我更换

t := time.Date(2016, 10, 30, 14, 0, 0, 0, time.UTC)

t := time.Date(2016, 6, 3, 9, 0, 0, 0, time.UTC)

然后输出

201663_9

但我希望它输出

20160603_09

即。月,日和小时都应该是两个字符长,可能在前面添加0。我怎样才能做到这一点?

或者如果你是我,你的程序会实现同样的东西吗?

感谢。

1 个答案:

答案 0 :(得分:3)

使用格式provided by the time package

https://play.golang.org/p/qIZ58CJqZa

t := time.Date(2016, 6, 3, 9, 0, 0, 0, time.UTC)
fmt.Println(t.Format("20060102_15"))

从参考时间格式字符串的时间包文档:

  

布局中使用的参考时间是具体时间:

Mon Jan 2 15:04:05 MST 2006
     

这是Unix时间1136239445.由于MST是GMT-0700,参考时间可以被认为是

01/02 03:04:05PM '06 -0700
     

要定义自己的格式,请记下参考时间格式化的方式;例如,查看ANSIC,StampMicro或Kitchen等常量的值。该模型用于演示参考时间的样子,以便Format和Parse方法可以将相同的变换应用于一般时间值。

     

在格式字符串中,下划线_表示如果以下数字(一天)有两位数字,可以用数字替换的空格;与固定宽度的Unix时间格式兼容。

     

小数点后跟一个或多个零表示小数秒,打印到给定的小数位数。小数点后跟一个或多个9表示小数秒,打印到给定的小数位数,并删除尾随零。解析(仅)时,输入可能包含紧跟在秒字段之后的小数秒字段,即使布局不表示其存在。在这种情况下,小数点后跟最大一系列数字将被解析为小数秒。