時間操作の要件
- 1900年からの秒数(UnixTime)
- sleep処理
- 1番からYmdHisの取得(曜日含む)
- YmdHisから1番の取得
- ミリ秒の取得
- 本プログラムの経過秒数
ソース
package main
import "fmt"
import "time"
import "strconv"
func getUnixTime() int{
return int(time.Now().Unix())
}
func getUnixNanoTime() int64{
ntime := time.Now().UnixNano()
return ntime % 1e6 / 1e3
}
func setSleep(sleepTime int){
fmt.Println("Sleep start ...")
time.Sleep(time.Duration(sleepTime) * time.Second)
fmt.Println("Sleep finish ...")
}
func setUnix2Fomat(unixTime int64) string{
dt := time.Unix(unixTime , 0);
y := dt.Year()
m := int(dt.Month())
d := dt.Day()
h := dt.Hour()
i := dt.Minute()
s := dt.Second()
return strconv.Itoa(y) +"/"+ strconv.Itoa(m) +"/"+ strconv.Itoa(d) +" "+ strconv.Itoa(h) +":"+ strconv.Itoa(i) +":"+ strconv.Itoa(s)
}
func getYmdhis2Unixtime(y int , m int , d int , h int , i int , s int) int64{
t := time.Date( y , time.Month(m) , d , h , i , s , 0 , time.Local)
return t.Unix()
}
func main(){
// 1
tmStart := getUnixTime()
fmt.Println(tmStart)
// 2
setSleep(3)
// 3
dateString := setUnix2Fomat(int64(tmStart))
fmt.Println(dateString)
// 4
tmFormat := getYmdhis2Unixtime(1970 , 1 , 1 , 9 , 0 , 1)
fmt.Println(tmFormat)
// 5
fmt.Println(getUnixNanoTime())
// 6
tmEnd := getUnixTime()
fmt.Println(tmEnd - tmStart , "s")
}
実行
$ time go run timeFunction.go
1494635031
Sleep start ...
Sleep finish ...
2017/5/13 9:23:51
1
336
3 s
real 0m3.239s
user 0m0.136s
sys 0m0.080s
解説
1. sleep-time
int値ではエラーになるので、time.Duration(**)としなければいけない
ここの箇所
time.Duration(sleepTime)
2. time.Sleep()はナノ秒処理
time.Secondを掛け合わせると良い
time.Sleep(time.Duration(sleepTime) * time.Second)
3. Month()が何故か文字列で返る
本来なら下記のように書くと、その月の数値が返ってほしいのに・・・
time.Now().Month()
> May
なんじゃこりゃ・・・・
この値に誰が喜んでいるのか非常に微妙!!
という事でint変換すると数値に返る・・・
int(time.Now().Month())
> 5
これはこれで意味が分かりにくいが、とりあえず、Go言語の日付取得の際のセオリーのようだ。
4. 年月日などの数値からtime型にする方法
下記が構文
年 , 月 , 日 , 時 , 分 , 秒 , ナノ秒 , TimeZone
t := time.Date( y , time.Month(m) , d , h , i , s , 0 , time.Local)
いくつか違和感がありますが、ナノ秒は0を入れる以外にあまりイメージできないので、正直指定する必要あるのか?と思うがこれは仕様と割り切り、
timezoneは、よく考えられている仕様と感心し、
またもや月の箇所は、新喜劇のオチのような書き方。
これも仕様と割り切りましょう。
※忘れないように!!!
5. ミリ秒の求め方
time.Now().UnixNano() % 1e6 / 1e3
これで下6桁を切り捨てて、下3桁を取得することで、ミリ秒が取得できます。
正直9桁もいらんので、これで十分
参考サイト
- time関連
- sleep処理
- 問題解決
- ブラウザで実行
- monthの文字列を数値で返す
- Goで詰まった所、ググった所メモ
- Golangで型情報を調べる
- Go / golang time.Now().UnixNano() convert to milliseconds?
0 件のコメント:
コメントを投稿