LoginSignup
1
0

Goの日時のformatが個人的にびっくりだった

Last updated at Posted at 2023-12-13

時間をプログラムで扱いたい

リクエストやレスポンス、ロギングなど様々な場面で現在時刻を扱うと思います。

JavaScriptならDate型、Pythonならdatetimeモジュールを使うのではないでしょうか。

自由自在なフォーマット

JavaScriptではtoString, toDateString, toLocaleString, toISOString などのDate型で定義されたフォーマットで表示することができます。

一方で任意のフォーマットにする場合は年、月、日の値を取得することができます。

例えばYYYY/MM/DDにするならこんな感じに書きます。

const now = new Date();
const year = now.getFullYear();
const month = ("0" + (now.getMonth() + 1)).slice(-2);
const day = ("0" + now.getDate()).slice(-2);

console.log(`${year}/${month}/${day}`);

処理としては

  1. 現在の時刻をnowとして取得する
  2. nowの年を4桁で取得してyearに格納
  3. nowの月を取得して0パディングしてmonthに格納
  4. nowの日を取得して0パディングしてdayに格納
  5. year/month/dayの形式で表示

という流れになります。

Goにおける日付操作

もちろんGoにも日付があります。

timeパッケージを使用します

リンク: https://pkg.go.dev/time

早速現在の時刻をYYYY/MM/DDで表示する処理を書いてみます。

まずはfmt.PrintfでJavaScriptのgetFullYearなどのメソッドを使った場合に似たコードを書いてみます。

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    fmt.Printf("%d/%02d/%02d\n", now.Year(), now.Month(), now.Day())
}

こんな感じで%dで数値を表示、%02dで2桁の0パディングした数値を表示できます。

さて、今回紹介したいtime.Timeのformatメソッドで書いてみるとどうでしょうか。

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    fmt.Println(now.Format("2006/01/02"))
}

なんと!

形式に2006/01/02というフォーマットでは見慣れない形式が出てきました。

これは何でしょうか?

調べるとすぐにヒットしますが、アメリカ式の日時の自然な順番を示します。

1月2日午後3時4分5秒2006年”

他のプログラミング言語ではなかなか見ない形で指定しています。

みなさんもGoで日時のフォーマットを見てびっくりしてみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0