به بسته زمانی Go اجازه دهید تفاوت های ظریف تبدیل منطقه زمانی و محاسبه را برای شما مدیریت کند.
مناطق زمانی برای هر برنامه ای که با تاریخ و زمان سروکار دارد بسیار مهم است. البته، این امر به ویژه در مورد برنامههایی که در سراسر قارهها و مکانها به کاربران خدمات ارائه میدهند صادق است. مناطق زمانی تعیین کننده افست از زمان هماهنگ جهانی (UTC) برای مکان های خاص در سراسر جهان است. آنها نقشی حیاتی در حصول اطمینان از مدیریت دقیق و قابل اعتماد زمان دارند.
Go بسته زمانی را در کتابخانه استاندارد خود برای کار با مناطق زمانی و زمانی فراهم می کند. با استفاده از بسته زمانی می توانید مناطق زمانی را در مکان های مختلف واکشی و تبدیل کنید.
بسته زمان
بسته زمانی عملکردی را برای کار با زمان ها و تاریخ ها، اندازه گیری و نمایش زمان، و دستکاری تاریخ ها با استفاده از تقویم میلادی بدون ثانیه های کبیسه فراهم می کند.
بسته زمانی یک نوع Timestruct ارائه می دهد که حاوی فیلد مکان است که می توانید از آن برای تنظیم مناطق زمانی استفاده کنید.
می توانید بسته زمان را با یک دستور import وارد کنید.
import "time"
در اینجا نوع ساختار زمان و فیلدهای آن آمده است. فیلدها صادر نشده اند، بنابراین در اسناد رسمی وجود ندارند.
package main
type Time struct {
// wall is the wall time in the format returned by the runtime.nanotime()
// function.
wall uint64
// ext is the monotonic clock reading in the format returned by
// runtime.nanotime().
ext int64
// loc is a pointer to the Location struct associated with this time.
loc *Location
}
type Location struct {
// name is the time zone name, such as "UTC" or "PST".
name string
// zone contains information about the time zone abbreviation, offset,
// and rule for a single time zone in the location.
zone []zone
// tx contains information about when the time zone abbreviation or
// offset changes for a location.
tx []zoneTrans
// extend contains the name of a parent time zone if this location
// extends from another one.
extend string
// cacheStart and cacheEnd are Unix timestamps that deine the range
// for which the cacheZone field is valid.
cacheStart int64
cacheEnd int64
// cacheZone points to the zone that is currently valid for the time
// range defined by cacheStart and cacheEnd.
cacheZone *zone
}
بسیاری از روش ها از ساختارهای زمان و مکان استفاده می کنند، از جمله روش های منطقه زمانی.
در حال بارگیری اطلاعات منطقه زمانی
بارگیری اطلاعات منطقه زمانی یکی از عملیات اساسی هنگام کار با مناطق زمانی است. روش LoadLocation عملکردی را برای بارگیری اطلاعات منطقه زمانی از پایگاه داده منطقه زمانی IANA ارائه می دهد. متد LoadLocation نام منطقه زمانی را می گیرد و اطلاعات مکان و یک خطا را برای مدیریت برمی گرداند. هنگامی که اطلاعات منطقه زمانی را بارگیری کرد، یک نمونه ساختار زمانی مرتبط با منطقه زمانی ایجاد می کند.
import (
"fmt"
"time"
)
func main() {
// Load the time zone location for America/New_York
loc, err := time.LoadLocation("America/New_York")
if err != nil {
fmt.Println("Error loading location:", err)
return
}
// Get the current time at a location
now := time.Now().In(loc)
fmt.Println("Current time in New York:", now)
}
متد In تابع Now یک مکان را می گیرد و زمان را در آنجا چاپ می کند:
علاوه بر این، اگر رشته مکان و افست منطقه زمانی را از UTC میدانید، میتوانید از روش FixedZone برای بارگیری زمان فعلی در یک مکان استفاده کنید. ابتدا باید زمان فعلی را در UTC بارگیری کنید و سپس از روش FixedZone برای بارگیری مکان بر اساس رشته و افست قبل از ارسال مکان به روش In the instance زمانی استفاده خواهید کرد.
import (
"fmt"
"time"
)
func main() {
// Get the current time in UTC
now := time.Now().UTC()
// Set the time zone for Lagos
lagos := now.In(time.FixedZone("WAT", 3600))
// Print the current time in both locations
fmt.Println("Current time in Lagos:", lagos)
}
تابع اصلی زمان جاری در لاگوس را در کنسول چاپ می کند.
اندازه گیری مدت زمان منطقه زمانی
بسته زمان متد Zone را برای بازیابی مخفف و افست منطقه زمانی مرتبط با مقدار time.Time ارائه می دهد. متد Zone رشته ای را که نشان دهنده مخفف منطقه زمانی است (به عنوان مثال “EST” برای “America/New_York”) و یک عدد صحیح نشان دهنده تعداد ثانیه های شرق UTC را برمی گرداند.
import (
"fmt"
"time"
)
func main() {
// Load the time zone location for America/New_York
loc, err := time.LoadLocation("America/New_York")
if err != nil {
fmt.Println("Error loading location:", err)
return
}
// Get the current time in UTC and the specified location
t1 := time.Now()
t2 := t1.In(loc)
// Get the offset in seconds for each time zone
//for the time zones
_, offset1 := t1.Zone()
_, offset2 := t2.Zone()
// Calculate the duration of the time zone shift
// between UTC and America/New_York
duration := offset2 - offset1
fmt.Printf("The time zone shift duration" +
" between UTC and New York is: %d seconds", duration)
}
در تابع اصلی، روش Zone مدت زمان جابجایی منطقه زمانی بین دو منطقه زمانی (مقادیر زمان. زمان) را اندازه گیری می کند. متغیر t1 زمان فعلی در UTC است و متغیر t2 زمان فعلی در منطقه زمانی “America/New_York” است.
این تابع متغیر مدت زمان (تفاوت افست بین مناطق زمانی) را که نشان دهنده تغییر منطقه زمانی بر حسب ثانیه است را چاپ می کند.
ارزیابی زمان بین مناطق زمانی
اگر مدت زمان بین مناطق زمانی را بدانید، می توانید زمان بین مناطق زمانی را ارزیابی کنید. میتوانید از متد Add از متد In از نمونه ساختار time.Time برای اضافه کردن مدت زمان به زمان در یک منطقه زمانی استفاده کنید.
import (
"log"
"time" // import the time package
)
func evaluateTime(t time.Time, duration time.Duration) time.Time {
// load the location for Africa/Lagos
location, err := time.LoadLocation("Africa/Lagos")
if err != nil {
log.Println("There was an error loading the location")
}
return t.In(location).Add(duration)
}
تابع ارزیابی زمان در یک نمونه time.Time و یک مدت زمان از نوع time.Duration می گیرد که زمان را در منطقه زمانی برمی گرداند. زمان فعلی را در “آفریقا/لاگوس” بارگیری می کند و مدت زمان را به زمان اضافه می کند.
زمان و تاریخ را با بسته زمان دستکاری کنید
بسته زمانی برای کار با زمان و تاریخ بسیار متنوع است. بسته زمان توابعی مانند Unix() برای تبدیل زمان به Unix time، Sleep() برای مکث goroutineها و Format() برای قالب بندی مقادیر زمان به رشته را ارائه می کند.