Go 言語の時間パッケージは、時間レイアウトとタイムゾーン情報を通じて時間をフォーマットできます。まずタイム ゾーン情報を読み込みます。これは time.LoadLocation 関数を通じて取得できます。次に、言語と地域のパッケージを使用して、タイムゾーンのレイアウト文字列を読み込みます。最後に、関数 time.Format を呼び出して、指定されたレイアウトとタイム ゾーンに従って時間をフォーマットします。
Golangを使用してタイムゾーンに従って時間をフォーマットする
Go言語では、一般的に使用されるtime
包提供了 Format
函数,可用于按照指定的布局格式化时间。其中,布局字符串可以通过 LoadLocation
関数を使用して、特定のタイムゾーンのタイムゾーン情報をロードし、タイムゾーンに従って時間をフォーマットします。
タイムゾーン情報をロードします
import ( "fmt" "time" "golang.org/x/text/language" "golang.org/x/text/region" ) func main() { // 创建一个代表特定时区的 Location 对象 loc, err := time.LoadLocation("Asia/Shanghai") if err != nil { fmt.Println(err) return } // 使用 Location 对象加载时区的布局字符串 layout, err := time.LoadLayoutIn(language.English, region.CN, "Monday, January 2, 2006") if err != nil { fmt.Println(err) return } }
時刻をフォーマットします
// 将当前时间根据时区信息格式化为字符串 now := time.Now().In(loc) formattedTime := now.Format(layout) fmt.Println(formattedTime)
出力:
Monday, January 2, 2023
実際のケース: ユーザーが入力した時刻をフォーマットします
収集する必要があるWebサービスがあるとします。ユーザーのタイムゾーンに従ってフォーマットされたユーザーの時刻データ。 Go 言語を使用して実装できるサンプル コードは次のとおりです:
package main import ( "fmt" "html/template" "net/http" "time" "golang.org/x/text/language" "golang.org/x/text/region" ) // 结构体用来存储用户输入的时间和时区 type TimeInput struct { Time string TimeZone string } func main() { // 创建一个 HTML 模板 tmpl := template.Must(template.New("timeinput").Parse(` <form action="/format" method="post"> <label for="time">Time (YYYY-MM-DD HH:MM:SS):</label> <input type="text" name="time" id="time"> <br> <label for="timezone">Time Zone:</label> <select name="timezone" id="timezone"> <option value="Asia/Shanghai">Asia/Shanghai</option> <option value="America/New_York">America/New_York</option> <option value="Europe/London">Europe/London</option> </select> <br> <input type="submit" value="Format"> </form> <h2>Formatted Time: {{ .FormattedTime }}</h2> `)) // 定义处理用户请求的 HTTP 处理函数 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodGet { if err := tmpl.Execute(w, nil); err != nil { http.Error(w, "Error rendering template", http.StatusInternalServerError) } } else if r.Method == http.MethodPost { // 解析用户输入的时间和时区 ti := &TimeInput{ Time: r.FormValue("time"), TimeZone: r.FormValue("timezone"), } // 加载时区信息 loc, err := time.LoadLocation(ti.TimeZone) if err != nil { http.Error(w, fmt.Sprintf("Error loading time zone: %v", err), http.StatusInternalServerError) return } // 将输入的时间转换为 time.Time t, err := time.Parse("2006-01-02 15:04:05", ti.Time) if err != nil { http.Error(w, fmt.Sprintf("Error parsing time: %v", err), http.StatusInternalServerError) return } // 使用时区信息格式化时间 layout, err := time.LoadLayoutIn(language.English, region.CN, "Monday, January 2, 2006") if err != nil { http.Error(w, fmt.Sprintf("Error loading layout: %v", err), http.StatusInternalServerError) return } formattedTime := t.In(loc).Format(layout) // Using the template engine, assign the formatted time to the "FormattedTime" field and render it ti.FormattedTime = formattedTime if err := tmpl.Execute(w, ti); err != nil { http.Error(w, "Error rendering template", http.StatusInternalServerError) } } }) // 启动 HTTP 服务器 http.ListenAndServe(":8080", nil) }
以上がGolangでタイムゾーンに基づいて時間をフォーマットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。