Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Week number based on timestamp with Go

Tags:

time

go

I am trying to get the week number based on the timestamp using GoLang.

ts is a int64 and converted

tm := time.UTUnix(ts, 0)
year := tm.Year()
week_nb := ???

for history ts has been generated using:

ts := time.Now().UTC().Unix()

I sent it to a gRPC based server and the server translate it to week number and year.

Any body knows who to convert a ts to a weeknumber ? time library already allow me to get the year but not the week

Thanks

like image 637
Seb Avatar asked Nov 09 '17 03:11

Seb


1 Answers

Package time

import "time" 

func (Time) ISOWeek

func (t Time) ISOWeek() (year, week int)

ISOWeek returns the ISO 8601 year and week number in which t occurs. Week ranges from 1 to 53. Jan 01 to Jan 03 of year n might belong to week 52 or 53 of year n-1, and Dec 29 to Dec 31 might belong to week 1 of year n+1.


For example,

package main

import (
    "fmt"
    "time"
)

func main() {
    tn := time.Now().UTC()
    fmt.Println(tn)
    year, week := tn.ISOWeek()
    fmt.Println(year, week)

    ts := time.Now().UTC().Unix()
    tn = time.Unix(ts, 0)
    fmt.Println(tn)
    year, week = tn.ISOWeek()
    fmt.Println(year, week)
}

Playground: https://play.golang.org/p/CjfPscwYXf

Output:

2009-11-10 23:00:00 +0000 UTC
2009 46
2009-11-10 23:00:00 +0000 UTC
2009 46
like image 178
peterSO Avatar answered Nov 11 '22 06:11

peterSO