Try it yourself with our free Epoch Converter tool — runs entirely in your browser, no signup needed.

How to Convert Unix timestamps in Go

How to convert Unix timestamps in Go

Converting Unix timestamps to human-readable dates is a common task in many applications, and Go provides a straightforward way to do so. A Unix timestamp represents the number of seconds that have elapsed since January 1, 1970, at 00:00:00 UTC. In this article, we will explore how to convert Unix timestamps in Go, covering the most common use case, edge cases, and performance tips.

Quick Example

package main

import (
    "fmt"
    "time"
)

func main() {
    unixTimestamp := int64(1643723400)
    date := time.Unix(unixTimestamp, 0)
    fmt.Println(date.Format("2006-01-02 15:04:05"))
}

This example converts a Unix timestamp to a human-readable date using the time.Unix function and formats it using the Format method.

Step-by-Step Breakdown

Let's break down the code:

  • import "time": We import the time package, which provides functions for working with dates and times.
  • unixTimestamp := int64(1643723400): We define a Unix timestamp as an int64 value.
  • date := time.Unix(unixTimestamp, 0): We use the time.Unix function to convert the Unix timestamp to a time.Time object. The second argument 0 represents the number of nanoseconds since the Unix timestamp.
  • fmt.Println(date.Format("2006-01-02 15:04:05")): We format the time.Time object using the Format method and print the result. The format string "2006-01-02 15:04:05" represents the desired output format.

Handling Edge Cases

Empty/Null Input

package main

import (
    "fmt"
    "time"
)

func main() {
    var unixTimestamp int64
    date := time.Unix(unixTimestamp, 0)
    fmt.Println(date.Format("2006-01-02 15:04:05"))
}

In this case, the output will be 0001-01-01 00:00:00, which is the zero value for time.Time.

Invalid Input

package main

import (
    "fmt"
    "time"
)

func main() {
    unixTimestamp := int64(-1000000000)
    date := time.Unix(unixTimestamp, 0)
    fmt.Println(date.Format("2006-01-02 15:04:05"))
}

In this case, the output will be 1969-12-31 23:59:59, which is the earliest possible date.

Large Input

package main

import (
    "fmt"
    "time"
)

func main() {
    unixTimestamp := int64(2147483647)
    date := time.Unix(unixTimestamp, 0)
    fmt.Println(date.Format("2006-01-02 15:04:05"))
}

In this case, the output will be 2038-01-19 03:14:07, which is the latest possible date.

Unicode/Special Characters

package main

import (
    "fmt"
    "time"
)

func main() {
    unixTimestamp := int64(1643723400)
    date := time.Unix(unixTimestamp, 0)
    fmt.Println(date.Format("2006-01-02 15:04:05 MST"))
}

In this case, the output will be 2022-02-01 15:04:05 MST, which includes the timezone offset.

Common Mistakes

Mistake 1: Using int instead of int64

// Wrong
unixTimestamp := int(1643723400)
date := time.Unix(unixTimestamp, 0)

// Correct
unixTimestamp := int64(1643723400)
date := time.Unix(unixTimestamp, 0)

Mistake 2: Using time.Now().Unix() instead of time.Now().UnixNano()

// Wrong
unixTimestamp := time.Now().Unix()
date := time.Unix(unixTimestamp, 0)

// Correct
unixTimestamp := time.Now().UnixNano()
date := time.Unix(0, unixTimestamp)

Mistake 3: Not handling errors

// Wrong
date, _ := time.Parse("2006-01-02 15:04:05", "Invalid date")
fmt.Println(date)

// Correct
date, err := time.Parse("2006-01-02 15:04:05", "Invalid date")
if err != nil {
    fmt.Println(err)
} else {
    fmt.Println(date)
}

Performance Tips

  • Use time.Unix instead of time.Parse for converting Unix timestamps to time.Time objects.
  • Use time.Now().UnixNano() instead of time.Now().Unix() for getting the current Unix timestamp.
  • Use date.Format instead of fmt.Sprintf for formatting time.Time objects.

FAQ

Q: What is the difference between time.Unix and time.Parse?

A: time.Unix converts a Unix timestamp to a time.Time object, while time.Parse parses a string into a time.Time object.

Q: How do I handle invalid input?

A: You can use the err value returned by time.Parse to handle invalid input.

Q: What is the maximum value for a Unix timestamp?

A: The maximum value for a Unix timestamp is 2147483647, which represents January 19, 2038, at 03:14:07 UTC.

Q: Can I use time.Unix with negative values?

A: Yes, time.Unix can handle negative values, which represent dates before January 1, 1970.

Q: How do I format a time.Time object with a timezone offset?

A: You can use the Format method with a format string that includes the timezone offset, such as "2006-01-02 15:04:05 MST".

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp