خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

دستکاری زمان و تاریخ در برنامه های Go

کار با زمان می‌تواند کار دشواری باشد، چه در حال جابجایی بین مناطق زمانی یا مدیریت ثانیه‌های کبیسه باشید. با بسته زمانی Go آن را ساده کنید.

زمان و تاریخ اجزای حیاتی بسیاری از نرم افزارها هستند، از ابزارهای مدیریت زمان گرفته تا برنامه های کاربردی وب. به عنوان یک برنامه نویس، باید بدانید که چگونه زمان و تاریخ را به هر زبانی که استفاده می کنید دستکاری کنید.

در Go، بسته زمان توابع را برای دستکاری زمان و تاریخ دسته بندی می کند. شما می توانید با وارد کردن آن بسته به این توابع در هر فایل منبع دسترسی داشته باشید.

بنابراین، منظور از دستکاری زمان و تاریخ چیست و چگونه می توان زمان و تاریخ را در Go دستکاری کرد؟

دستکاری زمان و تاریخ چیست؟

با توجه به نیازهای برنامه شما، ممکن است نیاز به کنترل، مدیریت یا تنظیم رفتار یا نمایش زمان و تاریخ داشته باشد.

زبان های برنامه نویسی مختلف عملکردهای خاص خود را برای دستکاری زمان و تاریخ دارند. زبان Go دارای قابلیت های گسترده ای است که برای این منظور مفید است.

دستکاری زمان و تاریخ می تواند شامل موارد زیر باشد:

  • به دست آوردن زمان فعلی یک مکان یا منطقه زمانی.
  • انجام عملیات حسابی در زمان و تاریخ.
  • تغییر فرمت ورودی/خروجی زمان ها و تاریخ ها.

برای شروع دستکاری زمان و تاریخ در برنامه های Go خود، بسته زمانی را در کنار بسته های دیگری که استفاده می کنید وارد کنید.

import (
    "fmt"
    "time"
)

نحوه دریافت زمان و تاریخ فعلی در Go

یک مورد رایج برای دستکاری زمان، بدست آوردن زمان محلی فعلی یا زمان فعلی یک منطقه زمانی یا مکان خاص است.

برای دریافت زمان و تاریخ در زمان محلی خود یا در یک منطقه زمانی یا مکان خاص، می‌توانید از توابع ()time.Now و ()time.LoadLocation استفاده کنید:

func main() {
    // Get the current time and date in Local time
    myTime := ime.Now()
    fmt.Println("Current time in ", myTime.Location(), " is: ", myTime)
 
    // Another way to get local time
    location, _ := time.LoadLocation("Local") // or time.LoadLocation("")
    fmt.Println("Currenttimein ", location, " is: ", time.Now().In(location))
 
    // another location
    location, _ = time.LoadLocation("America/New_York")
    fmt.Println("Current time in ", location, " is: ", myTime.In(location))
 
    // get the current time in Mountain Time Zone(MST)
    location, _ = time.LoadLocation("MST")
    fmt.Println("Current time in ", location, " is: ", myTime.In(location))
}

اجرای برنامه بالا با go run filename.go خروجی زیر را در ترمینال تولید می کند:

مطلب مرتبط:   نحوه رندر کردن اشیاء سه بعدی در یک برنامه React

خروجی برنامه Go برای دریافت زمان فعلی

روش LoadLocation از هر مکان و مخفف منطقه زمانی پشتیبانی نمی کند. با توجه به اسناد Go، فقط از مکان های موجود در پایگاه داده IANA.org پشتیبانی می کند.

چگونه کامپوننت ها را از یک تاریخ معین جدا کنیم

شما می توانید هر جزء از مهر زمانی را به طور جداگانه دریافت کنید که شبیه به کار با زمان و تاریخ در جاوا اسکریپت است.

راه های زیادی برای انجام این کار با استفاده از توابع زمان Go وجود دارد. این بخش هر روش را نشان می دهد.

می توانید از تابع Date() برای دریافت روز، ماه و سال و تابع Clock() برای دریافت ساعت، دقیقه و ثانیه استفاده کنید. مثلا:

funcmain() {
    myTime := time.Now();

    year, month, day := myTime.Date()
    fmt.Println("Year :", year)
    fmt.Println("Month :", month)
    fmt.Println("Day :", day)
    
    hour, min, sec := myTime.Clock()
    fmt.Println("Hour :", hour)
    fmt.Println("Minute :", min)
    fmt.Println("Seconds :", sec)
}

خروجی قسمت های مختلف مهر زمانی را نشان می دهد:

خروجی کد در Go برای دریافت زمان و تاریخ

همچنین می توانید واحدهای مهر زمانی را به صورت جداگانه با توابع زمانی برای هر یک از آنها دریافت کنید:

funcmain() {
    myTime := time.Now()
 
    // get each unit from Year to Nanosecond
    fmt.Println("Year :", myTime.Year())
    fmt.Println("Month :", myTime.Month())
    fmt.Println("Day :", myTime.Day())
    fmt.Println("Hour :", myTime.Hour())
    fmt.Println("Minute :", myTime.Minute())
    fmt.Println("Seconds :", myTime.Second())
    fmt.Println("Nanosecond :", myTime.Nanosecond())
}

همانطور که خروجی نشان می دهد، این به شما امکان دسترسی به نانو ثانیه را نیز می دهد:

خروجی برنامه رفتن برای دریافت هر واحد زمان

نمونه‌ها تا این لحظه بر روی به‌دست آوردن واحدهای مهر زمانی از زمان فعلی متمرکز شده‌اند. می‌توانید همان نوع عمل را روی مهر زمانی انجام دهید که () time.Now نیست.

می توانید سال، ماه، روز، ساعت، دقیقه و ثانیه یک تاریخ معین را استخراج کنید. برای انجام این کار، باید یک شی تاریخ جدید را مقداردهی اولیه کنید یا تاریخ را از یک رشته تجزیه کنید:

funcmain() {
    // get individual components of the time from Year to Nanosecond
   // from a specific date
    yourTime := time.Date(2020, 07, 1, 06, 32, 10, 0, time.UTC)
    fmt.Println("Year :", yourTime.Year())
    fmt.Println("Month :", yourTime.Month())
    fmt.Println("Day :", yourTime.Day())
    fmt.Println("Hour :", yourTime.Hour())
    fmt.Println("Minute :", yourTime.Minute())
    fmt.Println("Seconds :", yourTime.Second())
    fmt.Println("Nanosecond :", yourTime.Nanosecond())

    // using the Clock() function to get hour, minute, and second
    yourHour, yourMin, yourSec := yourTime.Clock()
    fmt.Println("Hour :", yourHour)
    fmt.Println("Minute :", yourMin)
    fmt.Println("Seconds :", yourSec)
 
    // get time and date from string
    dateString := "2020-07-01 06:32:10"
    layout := "2006-01-02 15:04:05"// your desired output format
    yourTime, _ = time.Parse(layout, dateString)
    fmt.Println("Your time is: ", yourTime)
    fmt.Println("Year :", yourTime.Year())
    fmt.Println("Month :", yourTime.Month())
    fmt.Println("Day :", yourTime.Day())
    fmt.Println("Hour :", yourTime.Hour())
    fmt.Println("Minute :", yourTime.Minute())
    fmt.Println("Seconds :", yourTime.Second())
}

این کد خروجی زیر را تولید می کند:

مطلب مرتبط:   راهنمای سریع عبارات لامبدا در C++

خروجی کد برای به دست آوردن جزئی از زمان

توجه داشته باشید که اگر منطقه زمانی را در رشته تاریخ مشخص نکنید، Parse() به طور پیش فرض از UTC استفاده می کند.

نحوه انجام عملیات حسابی با تاریخ و زمان

عملیات حسابی نوع دیگری از دستکاری است که می توانید در زمان و تاریخ در Go انجام دهید. عملیات ساده مانند جمع، تفریق و اختلاف زمانی همگی امکان پذیر است.

Go به شما امکان می دهد مقادیر time.Duration را با تمام واحدهای زمان تعریف کنید. ساعت تا زمان. نانوثانیه. می توانید از این مقادیر برای اضافه یا تفریق زمان با استفاده از Add() استفاده کنید. همچنین یک تابع AddDate() وجود دارد که 3 پارامتر سال، ماه و روز برای انجام جمع یا تفریق می گیرد.

کد زیر استفاده از این توابع را نشان می دهد:

funcmain() {
    curTime := time.Now()
    curTime = curTime.Add(time.Hour) // adds one hour
    fmt.Println("Current time is: ", curTime)
    tomorrow := curTime.Add(time.Hour * 24)
    fmt.Println("This time tomorrow is: ", tomorrow)
    nextWeek := curTime.Add(time.Hour * 24 * 7)
    fmt.Println("This time next week is: ", nextWeek)
 
    // using AddDate(y,m,d)
    nextTomorrow := curTime.AddDate(0, 0, 2)
    fmt.Println("This time Next tomorrow is: ", nextTomorrow)
    nextMonth := curTime.AddDate(0, 1, 0)
    fmt.Println("This time next month is: ", nextMonth)
    fiveYearsAndOneMonthAfter := curTime.AddDate(5, 1, 0)
    fmt.Println("This time five years and one month after is: ", fiveYearsAndOneMonthAfter)
}

که خروجی زیر را تولید می کند:

خروجی برنامه go برای اضافه کردن زمان و تاریخ

همچنین می‌توانید با افزودن پارامترهای منفی، زمان را با Add() و AddDate() کم کنید. برای مثال:

funcmain() {
    curTime := time.Now()
 
    // subtract one day using AddDate()
    yesterday := curTime.AddDate(0, 0, -1)
    fmt.Println("This time yesterday was: ", yesterday)
 
    // subtract one month using Add()
    lastMonth := curTime.Add(time.Hour * -24 * 30)
    fmt.Println("This time last month was: ", lastMonth)
}

این خروجی را تولید می کند:

خروجی برنامه برای تفریق زمان و تاریخ

اگرچه می توانید از Add() و AddDate() برای تشخیص تمایز بین تاریخ ها استفاده کنید، Go یک تابع Sub() دارد که کمی متفاوت عمل می کند:

funcmain() {
    curTime = time.Now()
    past := time.Date(2022, time.December, 25, 12, 0, 0, 0, time.UTC)
    diff := past.Sub(curTime)
    fmt.Println("Difference between now and the past is: ", diff)
    // get the difference in various units
    years := int(diff.Hours() / 24 / 365)
    fmt.Println("Years: ", years)
    months := int(diff.Hours() / 24 / 30)
    fmt.Println("Months: ", months)
    days := int(diff.Hours() / 24)
    fmt.Println("Days: ", days)
    hours := int(diff.Hours())
    fmt.Println("Hours: ", hours)
    // diff.Minutes(), diff.Seconds(), diff.Milliseconds(), diff.Nanoseconds() also return their units
}

این کد خروجی زیر را تولید می کند:

مطلب مرتبط:   10 اصل اساسی برنامه نویسی که هر برنامه نویسی باید بداند

خروجی برنامه برای دریافت تفاوت زمان و تاریخ

نحوه دریافت زمان و تاریخ در قالب های مختلف

همچنین می توانید با استفاده از تابع Format() خروجی های زمان و تاریخ را در قالب های مختلف دریافت کنید. در اینجا برخی از سبک های قالب بندی رایج آورده شده است:

funcmain() {
    curTime = time.Now()
    // built-in standard formatting styles
    fmt.Println("Current time is: ", curTime)
    fmt.Println("Current time in RFC3339 format is: ", curTime.Format(time.RFC3339))
    fmt.Println("Current time in RFC3339Nano format is: ", curTime.Format(time.RFC3339Nano))
    fmt.Println("Current time in RFC1123 format is: ", curTime.Format(time.RFC1123))
    fmt.Println("Current time in RFC1123Z format is: ", curTime.Format(time.RFC1123Z))
    fmt.Println("Current time in RFC822 format is: ", curTime.Format(time.RFC822))
    fmt.Println("Current time in RFC822Z format is: ", curTime.Format(time.RFC822Z))
    fmt.Println("Current time in RFC850 format is: ", curTime.Format(time.RFC850))
    fmt.Println("Current time in ANSIC format is: ", curTime.Format(time.ANSIC))
    fmt.Println("Current time in Unix format is: ", curTime.Format(time.UnixDate))
    // custom formatting styles
    // DD-MM-YYYY HH:MM:SS
    fmt.Println("Current time in custom format is: ", curTime.Format("02-01-2006 15:04:05"))
    // MM-DD-YYYY HH:MM:SS
    fmt.Println("Current time in custom format is: ", curTime.Format("01-02-2006 15:04:05"))
    // YYYY-MM-DD HH:MM:SS
    fmt.Println("Current time in custom format is: ", curTime.Format("2006-01-02 15:04:05"))
    // DD.MM.YYYY
    fmt.Println("Current time in custom format is: ", curTime.Format("02.01.2006"))
    // DD/MM/YYYY
    fmt.Println("Current time in custom format is: ", curTime.Format("02/01/2006"))
    // 01 Feb 2006
    fmt.Println("Current time in custom format is: ", curTime.Format("02 Jan 2006"))
    // 01 February 2006 Monday
    fmt.Println("Current time in custom format is: ", curTime.Format("02 February 2006 Monday"))
    // 01 February 2006 Mon 15:04:05
    fmt.Println("Current time in custom format is: ", curTime.Format("02 February 2006 Mon 15:04:05"))
}

این انواع مختلف قالب بندی خروجی زیر را تولید می کنند:

خروجی زمان و تاریخ در قالب های مختلف برنامه

دستکاری زمان و تاریخ در Go

لیست دستکاری هایی که می توانید در زمان ها و تاریخ ها انجام دهید تقریباً پایان ناپذیر است. بسته به دامنه برنامه شما، ممکن است نیاز به انجام بسیاری از عملیات تاریخ/زمان مختلف داشته باشید.

برای هر مورد استفاده ای که ممکن است داشته باشید، بسته زمان بسیار کاربردی است و روش های داخلی زیادی دارد.

می‌توانید از دستکاری تاریخ و زمان برای ساختن یک برنامه‌ریز روزانه ساده یا برنامه زمان‌بندی کار استفاده کنید.