トラック
/
Go
Go
/
演習
/
美容院の予約
美容院の予約

美容院の予約

学習演習

はじめに

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つのタスクがあり、いずれも予約日時を扱います。

1. 予約日時を解析する

Schedule関数を実装して、予約日時のテキスト表現を、対応するtime.Time形式に解析します。

Schedule("7/25/2019 13:45:00")
// => 2019-07-25 13:45:00 +0000 UTC

2. 予約がすでに過ぎているかどうかを確認する

HasPassed関数を実装します。この関数は予約日時を受け取り、その予約が過去のものであるかどうかを確認します。

HasPassed("July 25, 2019 13:45:00")
// => true

3. 予約が午後にあるかどうかを確認する

IsAfternoonAppointment関数を実装します。この関数は予約日時を受け取り、その予約が午後(12:00以降、18:00未満)にあるかどうかを確認します。

IsAfternoonAppointment("Thursday, July 25, 2019 13:45:00")
// => true

4. 予約の日時を説明する

Description関数を実装します。この関数は予約日時を受け取り、その日時の説明を返します。

Description("7/25/2019 13:45:00")
// => "You have an appointment on Thursday, July 25, 2019, at 13:45."

5. サロンの開店記念日を返す

AnniversaryDate関数を実装します。この関数は、サロンの開店記念日を、UTCでの今年の日付として返します。

現在の年が2020年だとします。

AnniversaryDate()

// => 2020-09-15 00:00:00 +0000 UTC

注意: 戻り値はtime.Timeで、時刻は関係ありません。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Go Exercism

美容院の予約を始める準備はできましたか?

Exercismに登録すれば、34個のコンセプト165個の演習、そして本物の人間によるメンタリングとともに、Goを学んでマスターできます。すべて無料です。