1. وقت اور تاریخ پیکیج کی تعارف

Go زبان میں time پیکیج ایک طاقتور لائبریری ہے جو وقت اور تاریخ کو ہینڈل کرنے کے لئے مخصوص ہے۔ یہ وقت اور تاریخ کے حساب کتاب مسائل کو حل کرنے کا بڑا سہولت فراہم کرتا ہے۔ آپ اس پیکیج کا استعمال کرکے موجودہ وقت حاصل کر سکتے ہیں، وقت اور تاریخ کو منتقل کر سکتے ہیں، وقت کا موازنہ کر سکتے ہیں، وقت کو پارس اور فارمیٹ کر سکتے ہیں، اور مزید بہت کچھ۔

2. وقت کی تفصیلات کا وضاحت

Go میں، Time قسم ایک لمحہ، ایک وقت کو ظاہر کرتا ہے۔ آپ time.Now() فنکشن کا استعمال کرکے موجودہ وقت حاصل کر سکتے ہیں۔ نیچے ایک سادہ مثال دی گئی ہے جو دکھاتی ہے کہ کس طرح آپ Time قسم کا بیان کیسے کرسکتے ہیں:

package main

import (
    "fmt"
    "time"
)

func main() {
    currentTime := time.Now()   // موجودہ وقت حاصل کریں
    fmt.Printf("موجودہ وقت: %v\n", currentTime)
    
    // آپس میں تفصیلات
    customTime := time.Date(2022, time.December, 31, 23, 59, 59, 0, time.UTC)
    fmt.Printf("کسٹم وقت: %v\n", customTime)
}

موجودہ کوڈ میں، time.Now() کا استعمال کرکے موجودہ وقت حاصل کیا گیا ہے، اور time.Date() فنکشن کا استعمال کرکے مخصوص وقت کو شروع کیا گیا ہے۔ اس میں سال، مہینہ، دن، گھنٹہ، منٹ، سیکنڈ، اور نینو سیکنڈ کو پیرامیٹر کے طور پر لیا گیا ہے، ساتھ ہی ایک وقت کا وقت بھی شامل ہے۔

3. فارمیٹنگ اور پارسنگ

3.1. وقت اور تاریخ کا فارمیٹنگ

وقت اور تاریخ کو فارمیٹ کرنا یعنی Time قسم کو ایک انسان پڑھنے کے قابل سٹرنگ کے طور پر ظاہر کرنا۔ Go میں، آپ Time قسم کے Format میتھڈ کا استعمال کر سکتے ہیں تاکہ وقت کو فارمیٹ کریں۔ Go نے وقت کو فارمیٹ کرنے کے لئے ایک خصوصی لے آؤٹ حوالہ (2006-01-02 15:04:05) کا استعمال کیا ہے۔ یہاں ایک مثال ہے:

package main

import (
    "fmt"
    "time"
)

func main() {
    currentTime := time.Now()

    // فارمیٹ کریں "YYYY-MM-DD" کے طور پر
    fmt.Println("فارمیٹ کردہ تاریخ:", currentTime.Format("2006-01-02"))
    
    // فارمیٹ کریں "YYYY-MM-DD hh:mm:ss" کے طور پر
    fmt.Println("فارمیٹ کردہ تاریخ اور وقت:", currentTime.Format("2006-01-02 15:04:05"))
    
    // فارمیٹ کریں "MM/DD/YY hh:mm:ss PM" کے طور پر
    fmt.Println("مختلف لے آؤٹ کے ساتھ فارمیٹ کیا گیا ہے:", currentTime.Format("01/02/06 03:04:05 PM"))
}

نوٹ کریں کہ فارمیٹنگ کو Go کے پیدائش کے وقت حوالہ (جنوری 2, 2006, 15:04:05 UTC) کے طور پر حوالہ دینا ہوتا ہے اور فارمیٹ کرنا ہے۔

3.2. وقت اور تاریخ کو پارس کرنا

اسٹرنگ پارسنگ کو لفظی وقت اور تاریخ رشتوں کو Time قسم میں تبدیل کرنے کا عمل کہا جاتا ہے۔ Go میں، آپ اسٹرنگ پارس کرنے کے لئے time.Parse میتھڈ کا استعمال کرسکتے ہیں۔ یہاں ایک سادہ مثال ہے:

package main

import (
    "fmt"
    "time"
)

func main() {
    timeString := "2022-12-31 23:59:59"

    // موافق وقت کا اسٹرنگ پارس کریں
    parsedTime, err := time.Parse("2006-01-02 15:04:05", timeString)
    if err != nil {
        fmt.Println("وقت کی پارسنگ میں خرابی:", err)
    } else {
        fmt.Printf("پارس شدہ وقت: %v\n", parsedTime)
    }
}

time.Parse فنکشن میں، پہلا پیرامیٹر لے آؤٹ اسٹرنگ کا فارمیٹ سٹرنگ ہے، جو داخل ہونے والی وقت کی فارمیٹ کا سبق بیان کرتا ہے، اور دوسرا پیرامیٹر وقت کی اسٹرنگ ہے جو آپ پارس کرنا چاہتے ہیں۔

4. وقت کے عمل

پروگرامنگ میں، وقت کے عمل کرنا ایک عام ضرورت ہے، چاہے وہ لاگ ریکارڈنگ میں ہو، واقعہ کی بھتیجی میں ہو، یا صارف کے انٹرفیس میں وقت کو ظاہر کرنا ہو، وقت کے اضافے اور تفریق کا سامنا کرنا ضروری ہوسکتا ہے۔

4.1. وقت کا اضافہ اور کمی

Go زبان کی time پیکیج میں Time ٹائپ وقت کے اضافہ اور کمی کے عملات کے لئے Add اور Sub میتھڈ فراہم کرتی ہے۔

  • Add میتھڈ کا استعمال وقت کے اضافے کے لئے:
package main

import (
	"fmt"
	"time"
)

func main() {
	// موجودہ وقت
	now := time.Now()

	// 2 گھنٹے کا اضافہ
	twoHoursLater := now.Add(2 * time.Hour)

	fmt.Println("موجودہ وقت:", now)
	fmt.Println("دو گھنٹے بعد:", twoHoursLater)
}

موجودہ کوڈ میں time.Hour مستقل استعمال ہوا ہے تاکہ دو گھنٹے کو ظاہر کرے، اور یہ Add میتھڈ کا استعمال کرکے now متغیر میں شامل کیا گیا ہے۔

  • Sub میتھڈ کا استعمال وقت کا فرق حساب کرنے کے لئے:
// موجودہ وقت
now := time.Now()

// دو گھنٹے پہلے کا وقت
twoHoursBefore := now.Add(-2 * time.Hour)

fmt.Println("موجودہ وقت:", now)
fmt.Println("دو گھنٹے پہلے:", twoHoursBefore)

// Sub میتھڈ کا استعمال کرکے وقت کا فرق حساب کریں
duration := now.Sub(twoHoursBefore)

fmt.Println("دونوں وقتوں کا فرق:", duration)

اوپر کے کوڈ مثال میں، -2 * time.Hour استعمال ہوا ہے تاکہ موجودہ وقت سے دو گھنٹے پہلے کا وقت ظاہر کرے، اور Sub میتھڈ کا استعمال کرکے دو Time مثالوں کے درمیان وقت کا فرق حساب کیا گیا ہے، جو ایک time.Duration ٹائپ دیتا ہے۔

4.2. وقت کا فاصلہ حساب

دو وقت کے مابین فرق حساب کرنا ایک عام کام ہے، مثلاً دو واقعات کے درمیان وقت کا فاصلہ حساب کرنا۔ Go زبان میں، اس کا آسانی سے حل کیا جا سکتا ہے Sub میتھڈ کا استعمال کرکے۔

package main

import (
	"fmt"
	"time"
)

func main() {
	startTime := time.Date(2023, 1, 1, 10, 0, 0, 0, time.UTC)
	endTime := time.Date(2023, 1, 1, 12, 30, 0, 0, time.UTC)

// وقت کا فرق حساب کریں
duration := endTime.Sub(startTime)

fmt.Printf("واقعہ %v دیر تک رہا۔\n", duration)
}

اس کوڈ کے ٹکڑے میں، ہم نے دو وقت کے نقطوں startTime اور endTime کو بنایا، اور ان کے درمیان وقت کا فرق duration حاصل کرنے کے لئے Sub میتھڈ کا استعمال کیا۔

5. ٹائم اسٹیمپ کو ٹائم ٹائپ میں تبدیل اور الٹ کرنا

ٹائم اسٹیمپ ایک خاص نقطہ وقت سے وقت کی پیمائش ہے (عام طور پر یونکس ایپاک سے سیکنڈز کی تعداد)، جو ایک دوسرے طریقے ہے کے طور پر وقت کو ظاہر کرنے کے لئے۔

  • ٹائم اسٹیمپ کو Time ٹائپ میں تبدیل کرنا:
package main

import (
	"fmt"
	"time"
)

func main() {
// موجودہ ٹائم اسٹیمپ حاصل کریں
timestamp := time.Now().Unix()

// ٹائم ٹائپ میں ٹائم اسٹیمپ تبدیل کریں
tm := time.Unix(timestamp, 0)

fmt.Println("موجودہ ٹائم اسٹیمپ:", timestamp)
fmt.Println("مطابقتی ٹائم ٹائپ:", tm)
}

Unix فنکشن نے ایک پیرامیٹر جو سیکنڈز کی تعداد کو ظاہر کرتا ہے اور دوسرا نینو سیکنڈز کی تعداد کو ظاہر کرتا ہے، اور یہ یونکس ٹائم اسٹیمپ کو Time.Time ٹائپ میں تبدیل کرنے کے لئے استعمال ہوسکتا ہے۔

  • ٹائم ٹائپ سے ٹائم اسٹیمپ حاصل کرنا:
// موجودہ وقت حاصل کریں
now := time.Now()

// ٹائم ٹائپ کو ٹائم اسٹیمپ میں تبدیل کریں
timestamp := now.Unix()

fmt.Println("موجودہ وقت:", now)
fmt.Println("مطابقتی ٹائم اسٹیمپ:", timestamp)

اس کوڈ میں، Unix میتھڈ کو استعمال کرکے Time ٹائپ کے مطابقتی یونکس ٹائم اسٹیمپ حاصل کیا گیا ہے، جو وقت کی معلومات کو ذخیرہ یا منتقل کرنے کے لئے بہت فائدہ مند ہے۔

6. وقت کا منطقی دستور

وقت کا منطقی دستور مختلف جغرافیائی علاقوں میں پھیلے ہوئے نظامات بنانے کے لئے اہم ہے۔ Go میں time پیکج آپ کو مختلف وقتی علاقوں کے ساتھ کام کرنے کی اجازت دیتا ہے۔

  • کسی مخصوص وقت کے لئے وقت بنانا:
package main

import (
	"fmt"
	"time"
)

func main() {
	// وقت کا علاقہ لوڈ کریں
	loc, _ := time.LoadLocation("Europe/Paris")

	// مخصوص وقت کا استعمال کرتے ہوئے وقت بنائیں
	now := time.Now().In(loc)

	fmt.Println("پیرس کا وقت:", now)
}

اوپر دیا گیا کوڈ "Europe/Paris" وقت کا علاقہ LoadLocation فنکشن استعمال کرتا ہے اور پھر "In" میتھڈ کا استعمال کرکے پیرس میں موجودہ وقت بناتا ہے۔

  • وقت کی علاقہ تبدیلی:
// یو ٹی سی وقت میں وقت بنائیں
utcTime := time.Date(2023, 1, 1, 12, 0, 0, 0, time.UTC)

// ہدف وقت کا علاقہ لوڈ کریں
nyLoc, _ := time.LoadLocation("America/New_York")

// یو ٹی سی وقت کو نیو یارک کے وقت میں تبدیل کریں
nyTime := utcTime.In(nyLoc)

fmt.Println("یو ٹی سی وقت:", utcTime)
fmt.Println("نیو یارک کا وقت:", nyTime)

اوپر دیا گیا کوڈ دکھاتا ہے کہ یو ٹی سی وقت کو نیو یارک کے وقت میں تبدیل کرنے کا طریقہ کار۔

7. ٹائمر اور ٹکر

time پیکج ٹائمر اور ٹکر فراہم کرتا ہے، جو وظائف کے لئے مداوم اجراء کی ضرورت ہوتی ہے۔

  • ٹائمر کا استعمال:
package main

import (
	"fmt"
	"time"
)

func main() {
	// 2 سیکنڈ کے بعد ٹرگر ہونے کے لئے ایک ٹائمر بنائیں
	timer := time.NewTimer(2 * time.Second)

	// جب ٹائمر ٹریگر ہوتا ہے، وہ موجودہ وقت کو timer.C کو بھیجتا ہے
	<-timer.C

	fmt.Println("ٹائمر ٹریگر ہوا")
}

اس کوڈ میں، ٹائمر جو 2 سیکنڈ بعد ٹریگر ہونے کے لئے بنایا گیا ہے، اور <-timer.C کا استعمال اس کے ٹریگر ہونے کا انتظار کرنے کے لئے کیا گیا ہے۔

  • دوہرے اجراء کے لئے ٹکر کا استعمال:
// ہر سیکنڈ بععد ٹریگر ہونے کے لئے ٹکر بنائیں
ticker := time.NewTicker(1 * time.Second)

for i := 0; i < 5; i++ {
	// چینل کے ذریعے قیمتیں حاصل کریں
	<-ticker.C
	fmt.Println("ٹکر ٹریگر ہوا", i+1, "مرتبہ")
}

// ٹکر کو روکیں
ticker.Stop()

اوپر دیا گیا کوڈ دکھاتا ہے کہ کیسے ہر سیکنڈ بعد ٹریگر ہونے والا ٹکر بنایا جاتا ہے، اور پھر اس کو 5 بار ٹریگر ہونے کے بعد روک دیا جاتا ہے۔

ٹائمر اور ٹکر وقت سے متعلق کارروائیوں کے لئے مضبوط اوزار ہیں، جو آپ کو دقیق وقت کنٹرول منطق بنانے میں مدد فراہم کرتے ہیں۔