Golangで頻繁に使う日付処理をまとめてみました。
年・月・日をそれぞれ単独で表示したい、
「2020-12-31」または「2020/12/31」と年月日だけ表示したい、「23:59」と時刻だけ表示したい
などの場合には、Year、Month、Day、Formatメソッドで単独で値を取得出来ます。
その他、日時に関する処理の備忘録です。
今回は、go playgroundで実行結果も記載してみました。
※テスト用の日付で「2020年12月31日23時59分59秒」を使用しています。
Golangで現在時刻でフォーマットされた日時を取得
目次
現在の日時を取得するには、Now関数を使用する。
※go playgroundでのtime.Now()実行結果は固定値が返される設定になっています。
package main import ( "fmt" "time" ) // タイムゾーンの指定 var timeZoneJST = time.FixedZone("Asia/Tokyo", 9*60*60) func main() { // タイムゾーン指定 time.Local = timeZoneJST time.LoadLocation("Asia/Tokyo") t := time.Now() // 現在時刻を取得する fmt.Println(t) // 年の取得 fmt.Println(t.Year()) // 月の取得 fmt.Println(int(t.Month())) // 日の取得 fmt.Println(t.Day()) //「2020-12-31」または「2020/12/31」と年月日だけ表示したい const format1 = "2006-01-02" fmt.Println(t.Format(format1)) const format2 = "2006年01月02日 15時04分05秒" fmt.Println(t.Format(format2)) //「23:59」と時刻だけ表示 const format3 = "15:04" fmt.Println(t.Format(format3)) }
もちろん実行できるプログラムには制限があるが、
コードを共有する際や、簡単な処理などはGoPlaygroundで気軽に試せるので重宝したい。
指定した日付でフォーマットされた日時を取得
Date関数に「年、月、日、時、分、秒、ミリ秒、タイムゾーン」の順で指定する
ことで特定の日時をデータオブジェクトを取得することが出来ます。
また、指定する日時が「2020/12/31」などの文字列の場合は、ParseInLocation関数にて、日付型にパースすることで日付を扱うことが出来ます。
package main import ( "fmt" "time" ) // タイムゾーンの指定 var timeZoneJST = time.FixedZone("Asia/Tokyo", 9*60*60) func main() { t := time.Date(2020, 12, 31, 23, 59, 59, 0, timeZoneJST) // 年の取得 fmt.Println(t.Year()) // 2020 // 月の取得 fmt.Println(int(t.Month())) // 12 // 日の取得 fmt.Println(t.Day()) // 31 //「2020-12-31」または「2020/12/31」と年月日だけ表示したい const format1 = "2006-01-02" fmt.Println(t.Format(format1)) // 2020-12-31 const format2 = "2006年01月02日 15時04分05秒" fmt.Println(t.Format(format2)) // 2020年12月31日23時59分59秒 //「23:59」と時刻だけ表示 const format3 = "15:04" fmt.Println(t.Format(format3)) // 23時59分 }
Golangに関しては、
「%Y」→ 「2006」
「yyyy-mm-dd」→「2006-01-02」
といった形で、実在する日時がフォーマット指定文字列となっている。
理由は、アメリカ式の日時の順番が、”1月2日午後3時4分5秒2006年”で有ることが関係している。
自然な並びで(1, 2, 3, 4, 5, 6)としたかったらしい・・・なんともアメリカらしい。
時刻中の曜日を日本語に変換する
取得した英語表記の曜日を“日”, “月”, “火”, “水”, “木”, “金”, “土”に変換し表示したい場合は、Weekday関数で曜日の値を取得し日本語の曜日とマッピングしてあげましょう。
UNIXタイムをTimeオブジェクトに変換する
取得したUNIXの時間を”2010-03-06 18:20:37 +0900 JST”形式のTimeオブジェクトに変換する際は、time.Unix関数で日時を取得出来ます。
日時に関する演算
日付を比較する際はEqual関数、Before関数、After関数で2つの日付を比較します。
add関数を用いて、ある日時に対して、時間・分・秒をそれぞれ足したり引いたりします
sub関数を使って、2つの日時の差を求める処理です
企業の情報やエンジニアとしてのキャリアアップの方法、現在の待遇(給料・報酬)、未経験からのステップアップ方法などのご相談を受け付けています。
お気軽にお問合せください。