at backyard

Color my life with the chaos of trouble.

Goでtime.Durationの文字列を日本語に変換する関数

完全に自分向けの備忘録。

time.Duration で表される秒数を日本語に変換したかったので、下記のような関数を作って対応した。

package main

import (
    "fmt"
    "strings"
    "time"
)

func jaDuration(t time.Duration) string {
    var jaStr string
    jaStr = strings.Replace(t.String(), "ns", "ナノ秒", 1)
    jaStr = strings.Replace(jaStr, "µs", "マイクロ秒", 1)
    jaStr = strings.Replace(jaStr, "ms", "ミリ秒", 1)
    jaStr = strings.Replace(jaStr, "s", "秒", 1)
    jaStr = strings.Replace(jaStr, "m", "分", 1)
    return strings.Replace(jaStr, "h", "時間", 1)
}

func main() {
    t1 := time.Duration(1 * time.Nanosecond)
    fmt.Println(t1)
    fmt.Println(jaDuration(t1))

    t2 := time.Duration(1 * time.Microsecond)
    fmt.Println(t2)
    fmt.Println(jaDuration(t2))

    t3 := time.Duration(1 * time.Millisecond)
    fmt.Println(t3)
    fmt.Println(jaDuration(t3))

    t4 := time.Duration(1 * time.Second)
    fmt.Println(t4)
    fmt.Println(jaDuration(t4))

    t5 := time.Duration(1 * time.Minute)
    fmt.Println(t5)
    fmt.Println(jaDuration(t5))

    t6 := time.Duration(1 * time.Hour)
    fmt.Println(t6)
    fmt.Println(jaDuration(t6))
}

上のコードを実行すると下記のような実行結果となる。

1ns
1ナノ秒
1µs
1マイクロ秒
1ms
1ミリ秒
1s
1秒
1m0s
1分0秒
1h0m0s
1時間0分0秒

ちなみにコードを作成するに当たり、下記のドキュメントを参照している。

https://pkg.go.dev/time#Duration.String