時間の期間
CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 62/68。
Goで時間を扱う際、「5分」や「2時間」といった期間を表現する必要がよくあります。Goでは、この目的のために専用の time.Duration 型が用意されています。
time.Duration は、2つの瞬間の間の時間の長さを表します。Goには、期間の作成をシンプルで読みやすくするための、いくつかの定義済み定数が含まれています:
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Second最も一般的に使用される期間(duration)の定数は、time.Nanosecond、time.Microsecond、time.Millisecond、time.Second、time.Minute、およびtime.Hourです。これらの定数に整数を掛けることで、必要な正確な期間を作成できます。
Duration値は、時間の演算、スケジューリング操作、およびプログラム内でのタイミング制御に不可欠です。これらは他の時間関数とシームレスに連携し、コード内で時間の幅を表現するための明確で読みやすい方法を提供します。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チャレンジ
簡単time.Duration を使用して、さまざまなエクササイズのインターバルと休憩時間を追跡するワークアウトセッションタイマーを作成します。このチャレンジでは、Goの定義済み定数を使用して期間(duration)の値を作成し、それらを使用して計算を行う能力が試されます。
2つの入力を受け取ります:
"exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit"という形式のエクササイズ定義を含む文字列(例:"Push-ups:30:Second,Plank:2:Minute,Squats:45:Second")"rest_duration_value:rest_duration_unit"という形式の休憩時間情報を含む文字列(例:"15:Second")
あなたのタスクは以下の通りです:
- 最初の入力をカンマで分割して、個々のエクササイズエントリを取得します。
- 各エクササイズエントリについて、コロンで分割してエクササイズ名、期間の値(文字列として)、および期間の単位を抽出します。
- 2番目の入力をコロンで分割して、休憩時間の値と単位を取得します。
- 期間の値を文字列から整数に変換し、適切な定数を使用して
time.Durationオブジェクトを作成します:"Second"の場合:time.Secondを掛けます。"Minute"の場合:time.Minuteを掛けます。"Hour"の場合:time.Hourを掛けます。
- アプリケーションヘッダーを表示します:
"=== WORKOUT SESSION TIMER ===" - セッションのセットアップを表示します:
"Setting up workout session..." - 各エクササイズについて、次を表示します:
"Exercise: [exercise_name] - Duration: [duration_object]" - 休憩時間を表示します:
"Rest period between exercises: [rest_duration_object]" - セッションの内訳を計算して表示します:
"=== SESSION BREAKDOWN ==="- 各エクササイズについて:
"[exercise_name]: [duration_in_seconds] seconds" "Rest periods: [rest_duration_in_seconds] seconds each"
- セッションの合計時間を計算します(すべてのエクササイズ時間の合計に、エクササイズ間の休憩時間を加えたもの):
"=== TIMING CALCULATIONS ===""Total exercise time: [total_exercise_duration_object]""Total rest time: [total_rest_duration_object]"(エクササイズ間の休憩時間なので、エクササイズの数より1つ少なくなります)"Complete session duration: [total_session_duration_object]"
- セッション統計を表示します:
"=== SESSION STATISTICS ===""Number of exercises: [number_of_exercises]""Longest exercise: [longest_exercise_name] ([longest_duration_object])""Shortest exercise: [shortest_exercise_name] ([shortest_duration_object])""Average exercise duration: [average_duration_in_seconds] seconds"
- 時間の換算を表示します:
"=== TIME CONVERSIONS ===""Session duration in minutes: [total_minutes]"(セッションの合計時間を分に換算します)"Session duration in hours: [total_hours]"(セッションの合計時間を時間に換算し、小数で表示します)
- 完了メッセージを表示します:
"Workout session timer configured successfully"
期間の操作には time パッケージ、入力文字列の分割には strings パッケージ、文字列の数値を整数に変換するには strconv パッケージ、そしてフォーマットされた出力には fmt パッケージを使用してください。time.Duration の値は加算が可能であり、Seconds()、Minutes()、Hours() などのメソッドを使用して異なる単位に変換できることを覚えておいてください。このチャレンジは、タイミングアプリケーションのために期間の値を作成し、操作する方法を示しています。
チートシート
Goは、2つの瞬間の間の期間を表すためにtime.Duration型を提供しています。
あらかじめ定義された定数に整数を掛けて、期間(duration)を作成します。
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Second一般的な期間の定数には、以下のようなものがあります。
time.Nanosecondtime.Microsecondtime.Millisecondtime.Secondtime.Minutetime.Hour
期間の値は加算することができ、Seconds()、Minutes()、Hours()といったメソッドを使用して、異なる単位に変換することも可能です。
自分で試してみよう
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// 入力を読み込む
var exerciseInput string
var restInput string
fmt.Scanln(&exerciseInput)
fmt.Scanln(&restInput)
// 入力からエクササイズを解析する
exerciseEntries := strings.Split(exerciseInput, ",")
// 入力から休憩時間を解析する
restParts := strings.Split(restInput, ":")
// TODO: 以下にコードを記述してください
// 1. 各エクササイズのエントリを解析し、名前、期間の値、および単位を抽出する
// 2. 期間の値を整数に変換し、time.Durationオブジェクトを作成する
// 3. 休憩時間を解析し、time.Durationオブジェクトを作成する
// 4. ワークアウトセッションの情報と計算結果を表示する
// 5. セッションの統計情報と時間の変換を計算する
// チャレンジで指定された通りに、必要な情報をすべて出力することを忘れないでください
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。