summaryrefslogtreecommitdiff
path: root/content/posts/golang-format-date-and-time.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/posts/golang-format-date-and-time.md')
-rw-r--r--content/posts/golang-format-date-and-time.md76
1 files changed, 76 insertions, 0 deletions
diff --git a/content/posts/golang-format-date-and-time.md b/content/posts/golang-format-date-and-time.md
new file mode 100644
index 0000000..44a4156
--- /dev/null
+++ b/content/posts/golang-format-date-and-time.md
@@ -0,0 +1,76 @@
+---
+title: 'Golang: Format Date and Time'
+description: "Most programming languages use the same layout (dd-mm-yyyy) to format date and time, but Go decided to go a different route. Below is a little cheat sheet of how to format date and time in Go."
+date: 2021-08-13T00:00:00+01:00
+tags: ['go', 'golang']
+draft: false
+---
+
+Most programming languages use the same layout (dd-mm-yyyy) to format date and time, but Go decided to go a different route. Below is a little cheat sheet of how to format date and time in Go.
+
+<!--more-->
+
+## Examples
+
+### Parsing exisiting date
+
+```go
+var (
+ timeToParse = "2021-09-13T07:43:52.823"
+ layout = "2006-01-02T03:04:05.999"
+)
+
+toTime, _ := time.Parse(layout, timeToParse)
+
+fmt.Printf("(%T): %s\n", toTime, toTime)
+
+// output: (time.Time): 2021-09-13 07:43:52.823 +0000 UTC
+```
+
+### Formatting date
+
+```go
+now := time.Now()
+fmt.Println("Default:", now)
+fmt.Println("Formatted:", now.Format("02-01-2006 15:04:05 -0700 MST"))
+
+// output: Default: 2021-08-13 09:01:29.233757 +0200 CEST m=+0.000065018
+// output: Formatted: 13-08-2021 09:01:29 +0200 CEST
+```
+
+## Options
+
+| Type | Options |
+| :------- | :---------------------------- |
+| Year | 06 2006 |
+| Month | 01 1 Jan January |
+| Day | 02 2 \_2 |
+| Weekday | Mon Monday |
+| Hours | 03 3 15 |
+| Minutes | 04 4 |
+| Seconds | 05 5 |
+| ms μs ns | .000 .000000 .000000000 |
+| ms μs ns | .999 .999999 .999999999 |
+| am / pm | PM pm |
+| Timezone | MST |
+| Offset | -0700 -07 -07:00 Z0700 Z07:00 |
+
+## Predefined layouts
+
+| Name | Layout |
+| :---------- | :----------------------------------------------------------- |
+| 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 |
+| 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 |