相关文章推荐
要出家的鞭炮  ·  Uncaught ...·  10 月前    · 
玩命的奔马  ·  Visual Studio 2012 ...·  10 月前    · 
安静的斑马  ·  Android HIDL学习(4) ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

If you're looking for a simple, but not perfect solution consider using time.RFC3339 constant. But also know that there are differences between ISO8601 which are too complex for this answer.

See https://ijmacd.github.io/rfc3339-iso8601/ for differences and also has a handy test file generator to show differences. There is also a good discussion on SO here What's the difference between ISO 8601 and RFC 3339 Date Formats?

package main
import (
    "time"
    "fmt"
func main(){
    fmt.Println(time.Now().Format(time.RFC3339))

golang Time.Format

This should be the accepted answer. The others may work, but they would certainly confuse someone who was unfamiliar with the code. – Shadoninja Oct 24, 2017 at 17:05 ISO 8601 and RFC3339 are not technically the same thing. stackoverflow.com/questions/522251/… – 425nesp Dec 9, 2017 at 6:33 From what I could tell, RFC3339 is a stricter version of ISO 8601. So it is probably safe to use the RFC format if a system expects the ISO. – Noah Huppert Dec 28, 2017 at 8:17 Note: It appears that converting to UTC first is not necessary: play.golang.org/p/UDrkigOfgIc – lukeic Nov 9, 2018 at 2:04 @lukeic that's because golang playground is working in UTC timezone. Try to run on your local machine. – Flexoid Dec 11, 2018 at 11:24 Note that if you include UTC(), the formatted string will always UTC offset +0000. To preserve the local time offset, omit UTC(). – nishanthshanmugham Feb 16 at 16:49
  • first I found the time.RFCxxx that was the closest to my target
  • I copied its value
  • I fiddled with it until I found the expected result
  • which is

    2006-01-02T15:04:05.999Z
                    The documentation for the time.Layout constants explains the format specifiers: pkg.go.dev/time#pkg-constants
    – nishanthshanmugham
                    Feb 16 at 16:51
    

    ISO8601 allows for variable levels of granularity. You can have just a year, year+month, year+month+day, add a time portion, and optionally have a timezone portion. Go's built-in time parsing, however, requires you to know ahead-of-time which parts will be included.

    The github.com/btubbs/datetime library provides a more flexible parser that can handle all the commonly used ISO8601 formats. See https://github.com/btubbs/datetime

    Disclosure: I wrote that library.

    "UnmarshalJSON methods support easy parsing of ISO 8601 timestamps from external systems" – lsl Jan 5, 2021 at 11:46 Thanks a lot! Works as advertised, parses "20220201T204925Z" which is super useful when you cant have colon in the format. I wish there was a datetime.Format(...) function as well. – Steven Varga Feb 1, 2022 at 22:02

    Replacing the sign in the format with a Z triggers the ISO 8601 behavior. Which is exactly time.RFC3339. If you are wanting the string output to end in 'Z' what you need to do is convert to the UTC zone.

    package main    
    import (
        "fmt"
        "time"
    func main() {
        fmt.Println(time.Now().UTC().Format("2006-01-02T15:04:05Z07:00"))
    // this is the same format used by RFC3339. just a note on why. 
                    I'm sure that it does print the correct time stamp. This is the same format used in time.Time. See golang.org/src/time/format.go?s=15423:15465#L78
    – dustinevan
                    Mar 5, 2018 at 18:45
                    Thanks a lot!  I could format to ISO8601 basic (no colons) : fmt.Println(time.Now().UTC().Format("20060102T150405Z")) in fact it works the other directions as well: tm, err := time.Parse("20060102T150405Z", "20220201T204925Z")
    – Steven Varga
                    Feb 1, 2022 at 22:06
            

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.