GoのTimeは、ある瞬間を表す型です。
日付と時刻の情報には、そのメソッドを通じてアクセスしたり、比較したり、操作したりできますが、timeパッケージ自体に対して呼び出す関数もいくつかあります。
現在の日付と時刻は、time.Now関数で取得できます。
time.Parse関数は、文字列をTime型の値にパースします。
Goには、パースで期待するレイアウトを定義する独自の方法があります。
次の特別なタイムスタンプの値を使って、レイアウトの例を書く必要があります:Mon Jan 2 15:04:05 -0700 MST 2006。
例えば:
import "time"
func parseTime() time.Time {
date := "Tue, 09/22/1995, 13:00"
layout := "Mon, 01/02/2006, 15:04"
t, err := time.Parse(layout,date) // time.Time, error
}
// => 1995-09-22 13:00:00 +0000 UTC
Time.Format()メソッドは、時刻の文字列表現を返します。
Parse関数と同じように、対象のレイアウトも、この特別なタイムスタンプの値を使った例によって定義します。
例えば:
import (
"fmt"
"time"
)
func main() {
t := time.Date(1995,time.September,22,13,0,0,0,time.UTC)
formattedTime := t.Format("Mon, 01/02/2006, 15:04") // string
fmt.Println(formattedTime)
}
// => Fri, 09/22/1995, 13:00
独自のレイアウトには、これらのオプションを組み合わせて使います。 Goでは、あらかじめ定義された日付とタイムスタンプのフォーマット定数も利用できます。
| 時間 | オプション |
|---|---|
| 年 | 2006 ; 06 |
| 月 | Jan ; January ; 01 ; 1 |
| 日 | 02 ; 2 ; _2(先頭の0用) |
| 曜日 | Mon ; Monday |
| 時 | 15(24時間形式); 3 ; 03(AMまたはPM) |
| 分 | 04 ; 4 |
| 秒 | 05 ; 5 |
| AM/PMの表示 | PM |
| 年内の通算日 | 002 ; __2 |
time.Time型には、特定の時刻にアクセスするためのさまざまなメソッドがあります。例えば、時:Time.Hour()、月:Time.Month()です。
詳しい仕組みについては、公式ドキュメントを参照してください。
timeには、経過時間を表すDurationという別の型をはじめ、ロケーション(タイムゾーン)、タイマー、その他関連する機能のサポートも含まれており、これらは別のコンセプトで扱います。
この演習では、2012年9月15日にオープンした美容サロンの予約スケジューラーに取り組みます。
5つのタスクがあり、いずれも予約日時を扱います。
Schedule関数を実装して、予約日時のテキスト表現を、対応するtime.Time形式に解析します。
Schedule("7/25/2019 13:45:00")
// => 2019-07-25 13:45:00 +0000 UTC
HasPassed関数を実装します。この関数は予約日時を受け取り、その予約が過去のものであるかどうかを確認します。
HasPassed("July 25, 2019 13:45:00")
// => true
IsAfternoonAppointment関数を実装します。この関数は予約日時を受け取り、その予約が午後(12:00以降、18:00未満)にあるかどうかを確認します。
IsAfternoonAppointment("Thursday, July 25, 2019 13:45:00")
// => true
Description関数を実装します。この関数は予約日時を受け取り、その日時の説明を返します。
Description("7/25/2019 13:45:00")
// => "You have an appointment on Thursday, July 25, 2019, at 13:45."
AnniversaryDate関数を実装します。この関数は、サロンの開店記念日を、UTCでの今年の日付として返します。
現在の年が2020年だとします。
AnniversaryDate()
// => 2020-09-15 00:00:00 +0000 UTC
注意: 戻り値はtime.Timeで、時刻は関係ありません。