...

Source file src/golang.conradwood.net/go-easyops/utils/timeparser.go

Documentation: golang.conradwood.net/go-easyops/utils

     1  package utils
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"time"
     7  )
     8  
     9  var (
    10  	// month=1, day=2
    11  	time_formats = []string{
    12  		"02/01/2006 15:04:05",
    13  		"2006-01-02 15:04:05",
    14  		"2006-01-02",
    15  		"02/01/2006",
    16  		"20060102T150405Z",
    17  		"20060102T150405",
    18  		"20060102Z",
    19  		"20060102",
    20  		"2006-01-02T15:04:05-07:00",
    21  		"2006-01-02T15:04:05",
    22  	}
    23  )
    24  
    25  // Parse a time in various (uk) formats and return a unix timestamp
    26  func ParseTimestamp(ts string) (uint32, error) {
    27  	t, err := ParseTime(ts)
    28  	if err != nil {
    29  		return 0, err
    30  	}
    31  	return uint32(t.Unix()), nil
    32  }
    33  
    34  // Parse a time in various (uk) formats and return a unix timestamp
    35  func ParseTimestampWithLocation(ts, tz string) (uint32, error) {
    36  	t, err := ParseTimeWithLocation(ts, tz)
    37  	if err != nil {
    38  		return 0, err
    39  	}
    40  	return uint32(t.Unix()), nil
    41  }
    42  
    43  // Parse a time in various (uk) formats and return a time.Time
    44  func ParseTime(ts string) (time.Time, error) {
    45  	d, err := strconv.ParseUint(ts, 10, 64)
    46  	if err == nil {
    47  		// it's just a number, parse as timestamp
    48  		t := time.Unix(int64(d), 0)
    49  		return t, nil
    50  	}
    51  	for _, tf := range time_formats {
    52  		t, err := time.Parse(tf, ts)
    53  		if err != nil {
    54  			//	fmt.Printf("%s is not formatted to \"%s\": %s\n", ts, tf, err)
    55  			continue
    56  		}
    57  		return t.UTC(), nil
    58  	}
    59  	return time.Time{}, fmt.Errorf("unknown time format \"%s\"", ts)
    60  }
    61  
    62  // Parse a time in various (uk) formats and return a unix timestamp (in UTC)
    63  func ParseTimeWithLocation(ts, tz string) (time.Time, error) {
    64  	loc, err := time.LoadLocation(tz)
    65  	if err != nil {
    66  		return time.Time{}, err
    67  	}
    68  	for _, tf := range time_formats {
    69  		t, err := time.ParseInLocation(tf, ts, loc)
    70  		if err != nil {
    71  			//	fmt.Printf("%s is not formatted to \"%s\": %s\n", ts, tf, err)
    72  			continue
    73  		}
    74  		return t.UTC(), nil
    75  	}
    76  	return time.Time{}, fmt.Errorf("unknown time format \"%s\"", ts)
    77  }
    78  

View as plain text