定义自定义时间格式

时间:2018-06-10 13:11:14

标签: go posix datetime-format

我正在尝试根据应用程序的要求编写自定义日期格式字符串。 使用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())
}

1 个答案:

答案 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。