ホームページ  >  記事  >  バックエンド開発  >  Golangでタイムゾーンに基づいて時間をフォーマットするにはどうすればよいですか?

Golangでタイムゾーンに基づいて時間をフォーマットするにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-06-01 15:28:01797ブラウズ

Go 言語の時間パッケージは、時間レイアウトとタイムゾーン情報を通じて時間をフォーマットできます。まずタイム ゾーン情報を読み込みます。これは time.LoadLocation 関数を通じて取得できます。次に、言語と地域のパッケージを使用して、タイムゾーンのレイアウト文字列を読み込みます。最後に、関数 time.Format を呼び出して、指定されたレイアウトとタイム ゾーンに従って時間をフォーマットします。

如何用 Golang 根据时区格式化时间?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。