2
0
mirror of https://github.com/araddon/dateparse.git synced 2026-08-19 00:57:59 +08:00
Files
dateparse/dateparse/main.go
2017-07-26 18:15:47 -07:00

85 lines
1.8 KiB
Go

package main
import (
"flag"
"fmt"
"time"
"github.com/apcera/termtables"
"github.com/araddon/dateparse"
)
var (
timezone = ""
datestr = ""
)
func main() {
flag.StringVar(&timezone, "timezone", "", "Timezone aka `America/Los_Angeles` formatted time-zone")
flag.Parse()
if len(flag.Args()) == 0 {
fmt.Println(`Must pass a time, and optional location:
./dateparse "2009-08-12T22:15:09.99Z"
./dateparse --timezone="America/Denver" "2017-07-19 03:21:51+00:00"
`)
return
}
datestr = flag.Args()[0]
var loc *time.Location
if timezone != "" {
// NOTE: This is very, very important to understand
// time-parsing in go
l, err := time.LoadLocation(timezone)
if err != nil {
panic(err.Error())
}
loc = l
}
table := termtables.CreateTable()
table.AddHeaders("method", "Input", "Zone Source", "Timezone", "Parsed, and Output as %v")
parsers := map[string]parser{
"ParseAny": parseAny,
"ParseIn": parseIn,
"ParseLocal": parseLocal,
}
zonename, _ := time.Now().In(time.Local).Zone()
for name, parser := range parsers {
time.Local = nil
table.AddRow(name, datestr, "Local Default", zonename, parser(datestr, nil))
if timezone != "" {
table.AddRow(name, datestr, "timezone arg", zonename, parser(datestr, loc))
}
time.Local = time.UTC
table.AddRow(name, datestr, "UTC", "UTC", parser(datestr, time.UTC))
}
fmt.Println(table.Render())
}
type parser func(datestr string, loc *time.Location) string
func parseLocal(datestr string, loc *time.Location) string {
time.Local = loc
t, _ := dateparse.ParseLocal(datestr)
return t.String()
}
func parseIn(datestr string, loc *time.Location) string {
t, _ := dateparse.ParseIn(datestr, loc)
return t.String()
}
func parseAny(datestr string, loc *time.Location) string {
t, _ := dateparse.ParseAny(datestr)
return t.String()
}