この CLI を作るにあたってハマったところとその解決法。
Golang の場合、お決まりのやり方があるみたいでググると大体同じやり方でやっている。
struct を定義して、Len, Less, Swap
メソッドを用意する。
type Bytime []*cloudwatch.Datapoint
func (arr Bytime) Len() int {
return len(arr)
}
func (arr Bytime) Less(i, j int) bool {
return arr[i].Timestamp.Before(*arr[j].Timestamp)
}
func (arr Bytime) Swap(i, j int) {
arr[i], arr[j] = arr[j], arr[i]
}
実際にソートするときは、別の配列を用意した。
var sortedResp Bytime = resp.Datapoints
sort.Sort(sortedResp)
timeA(2020-01-01 00:00:00 +0000 UTC) と timeB(2021-01-01 00:00:00 +0000 UTC) があるとする。
timeA, timeB := time.Date(2020, 1, 1, 0, 0, 0 , 0, time.UTC), time.Date(2021, 1, 1, 0, 0, 0 , 0, time.UTC)
時間の流れは timeA => timeB
。
このときの時間の比較は以下のようにできる。
timeA.Equal(timeB) // false
timeA.Before(timeB) // true
timeA.After(timeB) // false
timeA := time.Date(2020, 1, 1, 0, 0, 0 , 0, time.UTC)
loc, _ := time.LoadLocation("Asia/Tokyo")
fmt.Println("UTC " + timeA.String()) // UTC 2020-01-01 00:00:00 +0000 UTC
fmt.Println("JST " + timeA.In(loc).String()) // JST 2020-01-01 09:00:00 +0900 JST