Add support for Unix timestamps.
This commit is contained in:
parent
58e8465947
commit
ce9604b4e1
|
@ -1,5 +1,9 @@
|
||||||
utc: convert times to UTC
|
utc: convert times to UTC
|
||||||
|
|
||||||
|
Usage: utc [-f format] [-o format] [-q] [-t] [-u] [-z zone] [time(s)...]
|
||||||
|
utc -h | utc help
|
||||||
|
|
||||||
|
|
||||||
utc converts times to UTC. If no arguments are provided, prints the
|
utc converts times to UTC. If no arguments are provided, prints the
|
||||||
current time in UTC. If the only argument provided is "-", utc reads
|
current time in UTC. If the only argument provided is "-", utc reads
|
||||||
newline-separated timestamps from standard input. If the argument is
|
newline-separated timestamps from standard input. If the argument is
|
||||||
|
@ -8,8 +12,6 @@ the input and output timezones are the same (e.g., the local time zone
|
||||||
is UTC), a warning message will be printed on standard error. This can
|
is UTC), a warning message will be printed on standard error. This can
|
||||||
be suppressed with the -q option.
|
be suppressed with the -q option.
|
||||||
|
|
||||||
Usage: utc [-f format] [-h] [-o format] [-q] [-u] [-z zone] [time(s)...]
|
|
||||||
|
|
||||||
Flags:
|
Flags:
|
||||||
|
|
||||||
-f format Go timestamp format for input times. See the Go docs
|
-f format Go timestamp format for input times. See the Go docs
|
||||||
|
@ -20,22 +22,29 @@ Flags:
|
||||||
|
|
||||||
-h Print this help message.
|
-h Print this help message.
|
||||||
|
|
||||||
-o format Go timestamp format for outputting times. It uses
|
-o format Go timestamp format for outputting times.
|
||||||
the same format as the '-f' argument.
|
It uses the same format as the '-f' argument.
|
||||||
|
|
||||||
Default value: 2006-01-02 15:04 MST
|
Default value: 2006-01-02 15:04 MST
|
||||||
|
|
||||||
-q Suppress the timezone check warning message.
|
-q Suppress the timezone check warning message.
|
||||||
|
|
||||||
-u Timestamps are in UTC format and should be converted
|
-t Input times are Unix timestamps. Use with
|
||||||
to the timezone specified by the -z argument (which
|
-u to convert the timestamp to the timezone
|
||||||
defaults to 'Local'). Note that this isn't particularly
|
specified by the -z option (which defaults
|
||||||
useful with no arguments.
|
to Local).
|
||||||
|
|
||||||
|
-u Timestamps are in UTC format and should be
|
||||||
|
converted to the timezone specified by the
|
||||||
|
-z argument (which defaults to 'Local'). Note
|
||||||
|
that this isn't particularly useful with
|
||||||
|
no arguments.
|
||||||
|
|
||||||
-z zone Text form of the time zone; this can be in short
|
-z zone Text form of the time zone; this can be in short
|
||||||
time zone abbreviation (e.g. MST) or a location
|
time zone abbreviation (e.g. MST) or a
|
||||||
(e.g. America/Los_Angeles). This has no effect when
|
location (e.g. America/Los_Angeles). This
|
||||||
printing the current time.
|
has no effect when printing the current
|
||||||
|
time.
|
||||||
|
|
||||||
Default value: Local
|
Default value: Local
|
||||||
|
|
||||||
|
@ -69,6 +78,15 @@ PST8PDT time zone):
|
||||||
+ Using a different output format:
|
+ Using a different output format:
|
||||||
$ utc -o '2006-01-02T15:03:04-0700' '2016-06-14 21:30'
|
$ utc -o '2006-01-02T15:03:04-0700' '2016-06-14 21:30'
|
||||||
2016-06-14T21:09:30-0700 = 2016-06-15T04:04:30+0000
|
2016-06-14T21:09:30-0700 = 2016-06-15T04:04:30+0000
|
||||||
|
+ Converting a Unix timestamp to a UTC time:
|
||||||
|
$ utc -t 1466052938
|
||||||
|
2016-06-15 21:55 PDT = 2016-06-16 04:55 UTC
|
||||||
|
+ Converting a Unix timestamp to local time:
|
||||||
|
$ utc -t -u 1466052938
|
||||||
|
2016-06-16 04:55 UTC = 2016-06-15 21:55 PDT
|
||||||
|
+ Converting a Unix timestamp to EST:
|
||||||
|
$ utc -t -u -z EST 1466052938
|
||||||
|
2016-06-16 04:55 UTC = 2016-06-15 23:55 EST
|
||||||
+ Example of the warning message when running utc on a machine
|
+ Example of the warning message when running utc on a machine
|
||||||
where the local time zone is UTC:
|
where the local time zone is UTC:
|
||||||
$ utc
|
$ utc
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,11 +15,14 @@ var (
|
||||||
outFormat = format + " MST" // Output format.
|
outFormat = format + " MST" // Output format.
|
||||||
tz = "Local" // String descriptor for timezone.
|
tz = "Local" // String descriptor for timezone.
|
||||||
fromLoc *time.Location = time.Local // Go time.Location for the named timezone.
|
fromLoc *time.Location = time.Local // Go time.Location for the named timezone.
|
||||||
|
fromUnix bool // Input times are Unix timestamps.
|
||||||
toLoc *time.Location = time.UTC // Go time.Location for output timezone.
|
toLoc *time.Location = time.UTC // Go time.Location for output timezone.
|
||||||
)
|
)
|
||||||
|
|
||||||
func usage(w io.Writer) {
|
func usage(w io.Writer) {
|
||||||
fmt.Fprintf(w, `Usage: utc [-f format] [-h] [-o format] [-q] [-u] [-z zone] [time(s)...]
|
fmt.Fprintf(w, `Usage: utc [-f format] [-o format] [-q] [-t] [-u] [-z zone] [time(s)...]
|
||||||
|
utc -h | utc help
|
||||||
|
|
||||||
|
|
||||||
utc converts times to UTC. If no arguments are provided, prints the
|
utc converts times to UTC. If no arguments are provided, prints the
|
||||||
current time in UTC. If the only argument provided is "-", utc reads
|
current time in UTC. If the only argument provided is "-", utc reads
|
||||||
|
@ -38,25 +42,32 @@ Flags:
|
||||||
|
|
||||||
-h Print this help message.
|
-h Print this help message.
|
||||||
|
|
||||||
-o format Go timestamp format for outputting times. It uses
|
-o format Go timestamp format for outputting times.
|
||||||
the same format as the '-f' argument.
|
It uses the same format as the '-f' argument.
|
||||||
|
|
||||||
Default value: %s
|
Default value: %s
|
||||||
|
|
||||||
-q Suppress the timezone check warning message.
|
-q Suppress the timezone check warning message.
|
||||||
|
|
||||||
-u Timestamps are in UTC format and should be converted
|
-t Input times are Unix timestamps. Use with
|
||||||
to the timezone specified by the -z argument (which
|
-u to convert the timestamp to the timezone
|
||||||
defaults to '%s'). Note that this isn't particularly
|
specified by the -z option (which defaults
|
||||||
useful with no arguments.
|
to %s).
|
||||||
|
|
||||||
|
-u Timestamps are in UTC format and should be
|
||||||
|
converted to the timezone specified by the
|
||||||
|
-z argument (which defaults to '%s'). Note
|
||||||
|
that this isn't particularly useful with
|
||||||
|
no arguments.
|
||||||
|
|
||||||
-z zone Text form of the time zone; this can be in short
|
-z zone Text form of the time zone; this can be in short
|
||||||
time zone abbreviation (e.g. MST) or a location
|
time zone abbreviation (e.g. MST) or a
|
||||||
(e.g. America/Los_Angeles). This has no effect when
|
location (e.g. America/Los_Angeles). This
|
||||||
printing the current time.
|
has no effect when printing the current
|
||||||
|
time.
|
||||||
|
|
||||||
Default value: %s
|
Default value: %s
|
||||||
`, format, outFormat, tz, tz)
|
`, format, outFormat, tz, tz, tz)
|
||||||
}
|
}
|
||||||
|
|
||||||
func usageExamples() {
|
func usageExamples() {
|
||||||
|
@ -92,6 +103,15 @@ PST8PDT time zone):
|
||||||
+ Using a different output format:
|
+ Using a different output format:
|
||||||
$ utc -o '2006-01-02T15:03:04-0700' '2016-06-14 21:30'
|
$ utc -o '2006-01-02T15:03:04-0700' '2016-06-14 21:30'
|
||||||
2016-06-14T21:09:30-0700 = 2016-06-15T04:04:30+0000
|
2016-06-14T21:09:30-0700 = 2016-06-15T04:04:30+0000
|
||||||
|
+ Converting a Unix timestamp to a UTC time:
|
||||||
|
$ utc -t 1466052938
|
||||||
|
2016-06-15 21:55 PDT = 2016-06-16 04:55 UTC
|
||||||
|
+ Converting a Unix timestamp to local time:
|
||||||
|
$ utc -t -u 1466052938
|
||||||
|
2016-06-16 04:55 UTC = 2016-06-15 21:55 PDT
|
||||||
|
+ Converting a Unix timestamp to EST:
|
||||||
|
$ utc -t -u -z EST 1466052938
|
||||||
|
2016-06-16 04:55 UTC = 2016-06-15 23:55 EST
|
||||||
+ Example of the warning message when running utc on a machine
|
+ Example of the warning message when running utc on a machine
|
||||||
where the local time zone is UTC:
|
where the local time zone is UTC:
|
||||||
$ utc
|
$ utc
|
||||||
|
@ -149,6 +169,7 @@ func init() {
|
||||||
flag.BoolVar(&help, "h", false, "print usage information")
|
flag.BoolVar(&help, "h", false, "print usage information")
|
||||||
flag.StringVar(&outFormat, "o", outFormat, "output time format")
|
flag.StringVar(&outFormat, "o", outFormat, "output time format")
|
||||||
flag.BoolVar(&quiet, "q", false, "suppress zone check warning")
|
flag.BoolVar(&quiet, "q", false, "suppress zone check warning")
|
||||||
|
flag.BoolVar(&fromUnix, "t", false, "input times are Unix timestamps")
|
||||||
flag.BoolVar(&utc, "u", false, "timestamps are in UTC format")
|
flag.BoolVar(&utc, "u", false, "timestamps are in UTC format")
|
||||||
flag.StringVar(&tz, "z", tz, "time zone to convert from; if blank, the local timezone is used")
|
flag.StringVar(&tz, "z", tz, "time zone to convert from; if blank, the local timezone is used")
|
||||||
|
|
||||||
|
@ -194,11 +215,26 @@ func showTime(t time.Time) {
|
||||||
t.In(toLoc).Format(outFormat))
|
t.In(toLoc).Format(outFormat))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseTime(in string) (time.Time, error) {
|
||||||
|
if !fromUnix {
|
||||||
|
return time.ParseInLocation(format, in, fromLoc)
|
||||||
|
}
|
||||||
|
|
||||||
|
var t time.Time
|
||||||
|
n, err := strconv.ParseInt(in, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return t, err
|
||||||
|
}
|
||||||
|
|
||||||
|
t = time.Unix(n, 0).In(fromLoc)
|
||||||
|
return t, nil
|
||||||
|
}
|
||||||
|
|
||||||
func dumpTimes(times []string) bool {
|
func dumpTimes(times []string) bool {
|
||||||
var errored bool
|
var errored bool
|
||||||
|
|
||||||
for _, t := range times {
|
for _, t := range times {
|
||||||
u, err := time.ParseInLocation(format, t, fromLoc)
|
u, err := parseTime(t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errored = true
|
errored = true
|
||||||
fmt.Fprintf(os.Stderr, "Malformed time %s: %s\n", t, err)
|
fmt.Fprintf(os.Stderr, "Malformed time %s: %s\n", t, err)
|
||||||
|
|
Loading…
Reference in New Issue