我正在尝试根据应用程序的要求编写自定义日期格式字符串。 使用Go time包我使用笨拙的函数获取格式(见下文)。
此外,由于此功能每天会被调用数百万次,我希望这也是超级高效的。 Go中是否有POSIX样式格式?
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
fmt.Printf("Time now is %d%02d%02d%02d%02d%02d",
t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
}
答案 0 :(得分:3)
在Go中,内置布局可传递给.Format()
Time
func main() {
fmt.Println(time.Now().Format(time.ANSIC))
fmt.Println(time.Now().Format(time.UnixDate))
fmt.Println(time.Now().Format(time.RFC3339))
}
的{{1}}方法,其中一种可能是您正在寻找的内容:
fmt.Printf("...", t.Year(), t.Month(), ...)
这比Sun Jun 10 13:18:09 2018
Sun Jun 10 13:18:09 UTC 2018
2018-06-10T13:18:09Z
更快,但我们在这里谈论的是“更快”的微秒,所以确实没有太大区别。
输出:
const (
ANSIC = "Mon Jan _2 15:04:05 2006"
UnixDate = "Mon Jan _2 15:04:05 MST 2006"
RubyDate = "Mon Jan 02 15:04:05 -0700 2006"
RFC822 = "02 Jan 06 15:04 MST"
RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
RFC850 = "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
RFC3339 = "2006-01-02T15:04:05Z07:00"
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
Kitchen = "3:04PM"
// Handy time stamps.
Stamp = "Jan _2 15:04:05"
StampMilli = "Jan _2 15:04:05.000"
StampMicro = "Jan _2 15:04:05.000000"
StampNano = "Jan _2 15:04:05.000000000"
)
还有更多预定义的布局,因此您可以检查所有布局,看看其中一个是否符合您的需求。这里他们直接来自源代码:
Parse
除此之外,只是创建自己的布局,实际上没有区别。
要创建自定义布局字符串,请参阅文档:
Format
函数和Jan 2 15:04:05 2006 MST
方法使用的布局字符串通过示例显示应如何表示参考时间。我们强调,必须显示参考时间的格式,而不是用户选择的时间。因此,每个布局字符串都是时间戳的表示:fmt.Println(time.Now().Format("Mon January 2, 2006 - 15:04:05.000"))
。
所以,例如:
Sun June 10, 2018 - 17:49:32.557
给出:
Jan 2 15:04:05 2006 MST
如果你想要不同的东西,你只需要格式化日期PowerShell
你想要它的显示方式。你也可以看看see func (Time) Format
在Go by Example。