LoginSignup
87
58

More than 5 years have passed since last update.

Golangでの日付のフォーマット指定の方法について

Last updated at Posted at 2015-06-11

Golangで単純に日付のフォーマットに変更しようとしただけなんですがちょっとハマったのでそのメモです。(以下では、packageimportは適切に宣言されているものとして説明をします。)

例えば、今日の日付を特定のフォーマットに変更する場合をRubyとGolangとを比較して説明します。

Rubyの場合

Rubyで日付のフォーマットを変更するには以下のように、%から始まる指定されたフォーマットに従って変換されます。

# 2015-06-12 00:50:19 +0900
Time.now
# 2015-06-12
Time.now.strftime("%Y-%m-%d") 

Golangの場合

一方、Golangでは特定の文字列で指定されたフォーマットに従って変換されます。

// 2015-06-12 00:17:10.467238206 +0900 JST
time.Now()
// 2015-06-12
time.Now().Format("2006-01-02")

フォーマットとして指定できるものは以下の通りです。日付のフォーマットに関するより詳しいことは、Source file src/time/format.goに書かれています。

const (
    stdLongMonth      = "January"
    stdMonth          = "Jan"
    stdNumMonth       = "1"
    stdZeroMonth      = "01"
    stdLongWeekDay    = "Monday"
    stdWeekDay        = "Mon"
    stdDay            = "2"
    stdUnderDay       = "_2"
    stdZeroDay        = "02"
    stdHour           = "15"
    stdHour12         = "3"
    stdZeroHour12     = "03"
    stdMinute         = "4"
    stdZeroMinute     = "04"
    stdSecond         = "5"
    stdZeroSecond     = "05"
    stdLongYear       = "2006"
    stdYear           = "06"
    stdPM             = "PM"
    stdpm             = "pm"
    stdTZ             = "MST"
    stdISO8601TZ      = "Z0700"  // prints Z for UTC
    stdISO8601ColonTZ = "Z07:00" // prints Z for UTC
    stdNumTZ          = "-0700"  // always numeric
    stdNumShortTZ     = "-07"    // always numeric
    stdNumColonTZ     = "-07:00" // always numeric
)

最後に

自分はRubyのようなフォーマットの指定に慣れていたのでGolangのこの指定方法はちょっと気持ちわるいなと思ってしまいました。なんでこのような分かりにくいものになっているんでしょうか?それともこれが普通なんですかね。もしもこの理由を知っている方がいたら教えてください。

参照

87
58
1

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
87
58