/ / Làm việc với các múi giờ khác nhau trong Go

Làm việc với các múi giờ khác nhau trong Go

Múi giờ rất quan trọng đối với bất kỳ ứng dụng nào liên quan đến ngày và giờ. Tất nhiên, điều này đặc biệt đúng đối với các ứng dụng phục vụ người dùng trên khắp các châu lục và địa điểm. Các múi giờ xác định phần bù từ Giờ phối hợp quốc tế (UTC) cho các địa điểm cụ thể trên thế giới. Chúng đóng một vai trò quan trọng trong việc đảm bảo xử lý thời gian chính xác và đáng tin cậy.


Go cung cấp gói thời gian trong thư viện tiêu chuẩn của nó để làm việc với thời gian và múi giờ. Bạn có thể tìm nạp và chuyển đổi múi giờ tại các vị trí khác nhau bằng cách sử dụng gói thời gian.


Gói thời gian

Các thời gian gói cung cấp chức năng để làm việc với thời gian và ngày tháng, đo lường và hiển thị thời gian cũng như thao tác ngày tháng bằng lịch Gregorian mà không có giây nhuận.

Gói thời gian cung cấp một Thời gian loại cấu trúc chứa trường vị trí mà bạn có thể sử dụng để đặt múi giờ.

Bạn có thể nhập gói thời gian bằng câu lệnh nhập.

 import "time"

Đây là kiểu cấu trúc thời gian và các trường của nó. Các trường chưa được xuất, vì vậy chúng không có trong tài liệu chính thức.

 package main

type Time struct {
    
    
    wall uint64

    
    
    ext int64

    
    loc *Location
}

type Location struct {
    
    name string

    
    
    zone []zone

    
    
    tx []zoneTrans

    
    
    extend string

    
    
    cacheStart int64
    cacheEnd int64

    
    
    cacheZone *zone
}

Nhiều phương pháp sử dụng Thời gian và Vị trí cấu trúc, bao gồm các phương pháp múi giờ.

Đang tải thông tin múi giờ

Load thông tin múi giờ là một trong những thao tác cơ bản khi làm việc với múi giờ. Các TảiVị trí cung cấp chức năng tải thông tin múi giờ từ Cơ sở dữ liệu múi giờ IANA. Các TảiVị trí phương thức lấy tên của múi giờ và trả về thông tin vị trí và lỗi để xử lý. Khi nó đã tải thông tin múi giờ, nó sẽ tạo một thời gian struct được liên kết với múi giờ.

 import (
    "fmt"
    "time"
)

func main() {
    
    loc, err := time.LoadLocation("America/New_York")

    if err != nil {
        fmt.Println("Error loading location:", err)
        return
    }

    
    now := time.Now().In(loc)
    fmt.Println("Current time in New York:", now)
}

Các Trong phương pháp của Bây giờ hàm lấy một vị trí và in thời gian ở đó:

kết quả in thời gian hiện tại ở NY

Ngoài ra, bạn có thể sử dụng các Vùng cố định để tải thời gian hiện tại ở một vị trí nếu bạn biết chuỗi vị trí và phần bù của múi giờ từ UTC. Trước tiên, bạn sẽ cần tải thời gian hiện tại theo UTC, sau đó, bạn sẽ sử dụng phương thức FixedZone để tải vị trí dựa trên chuỗi và độ lệch trước khi chuyển vị trí sang phương thức của phiên bản thời gian.

 import (
    "fmt"
    "time"
)

func main() {
    
    now := time.Now().UTC()

    
    lagos := now.In(time.FixedZone("WAT", 3600))

    
    fmt.Println("Current time in Lagos:", lagos)
}

Các chủ yếu chức năng in thời gian hiện tại ở Lagos ra bàn điều khiển.

Đo thời lượng múi giờ

Gói thời gian cung cấp Vùng phương pháp truy xuất chữ viết tắt và độ lệch của múi giờ được liên kết với một thời gian.Thời gian giá trị. Phương thức Zone trả về chuỗi biểu thị chữ viết tắt của múi giờ (ví dụ: “EST” cho “America/New_York”) và một số nguyên biểu thị số giây ở phía đông của UTC.

 import (
    "fmt"
    "time"
)

func main() {
    
    loc, err := time.LoadLocation("America/New_York")

    if err != nil {
        fmt.Println("Error loading location:", err)
        return
    }

    
    t1 := time.Now()
    t2 := t1.In(loc)

    
    
    _, offset1 := t1.Zone()
    _, offset2 := t2.Zone()

    
    
    duration := offset2 - offset1

    fmt.Printf("The time zone shift duration" +
      " between UTC and New York is: %d seconds", duration)
}

Trong hàm chính, phương thức Zone đo khoảng thời gian thay đổi múi giờ giữa hai múi giờ (giá trị time.Time). Các t1 biến là thời gian hiện tại tính bằng UTC và biến t2 biến là thời gian hiện tại trong múi giờ “America/New_York”.

Chức năng in các khoảng thời gian biến (sự khác biệt về độ lệch giữa các múi giờ) biểu thị sự thay đổi múi giờ tính bằng giây.

Đánh giá thời gian giữa các múi giờ

Bạn có thể đánh giá thời gian giữa các múi giờ nếu bạn biết khoảng thời gian giữa các múi giờ. Bạn có thể dùng Thêm vào phương thức của phương thức In của phiên bản cấu trúc time.Time của bạn để thêm thời lượng vào thời gian trong một múi giờ.

 import (
    "log"
    "time"
)

func evaluateTime(t time.Time, duration time.Duration) time.Time {
    
    location, err := time.LoadLocation("Africa/Lagos")

    if err != nil {
        log.Println("There was an error loading the location")
    }
    
    return t.In(location).Add(duration)
}

Các đánh giá thời gian chức năng mất trong một thời gian. Ví dụ thời gian và thời lượng của loại khoảng thời gian, trả về thời gian theo múi giờ. Nó tải thời gian hiện tại ở “Châu Phi/Lagos” và thêm thời lượng cho thời gian.

Thao tác thời gian và ngày tháng với gói thời gian

Gói thời gian rất linh hoạt để làm việc với cả thời gian và ngày tháng. Gói thời gian cung cấp các chức năng như Unix() để chuyển đổi thời gian thành thời gian Unix, Sleep() để tạm dừng goroutines và Format() để định dạng giá trị thời gian thành chuỗi.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *