الحصول على الوقت الحالي
جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 58 من 68.
عند العمل مع التواريخ والأوقات في برامج Go الخاصة بك، ستحتاج إلى استخدام حزمة time المدمجة في Go. توفر هذه الحزمة جميع الوظائف التي تحتاجها للعمل مع العمليات المتعلقة بالوقت.
نقطة البداية الأكثر شيوعاً هي الحصول على الوقت الحالي. تجعل لغة Go هذا الأمر بسيطاً باستخدام الدالة time.Now():
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now)
}تعيد الدالة time.Now() كائناً من النوع time.Time يمثل اللحظة الحالية. عند طباعة هذا الكائن، فإنه يعرض التاريخ والوقت بتنسيق قابل للقراءة، بما في ذلك معلومات المنطقة الزمنية.
يحتوي كائن time.Time هذا على جميع المعلومات حول تلك اللحظة المحددة - السنة، والشهر، واليوم، والساعة، والدقيقة، والثانية، وحتى النانو ثانية. ستستخدم هذا كأصل لجميع عمليات الوقت الأخرى في Go.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلقم بإنشاء تطبيق لتتبع الوقت يلتقط الوقت الحالي ويعرضه بتنسيقات متعددة. سيختبر هذا التحدي قدرتك على استخدام دالة time.Now() والعمل مع كائنات time.Time لاستخراج مكونات مختلفة من اللحظة الحالية.
ستتلقى مدخلاً واحداً:
- سلسلة نصية تحتوي على طلبات تنسيق العرض مفصولة بفاصلة بتنسيق
"format1,format2,format3"(على سبيل المثال،"full,date,time,year,month,day")
مهمتك هي:
- استخدام
time.Now()لالتقاط الوقت الحالي وتخزينه في متغير - عرض رأس التطبيق:
"=== TIME TRACKER APPLICATION ===" - عرض تأكيد التقاط الطابع الزمني:
"Current time captured successfully" - تحليل المدخلات عن طريق تقسيمها عند الفواصل للحصول على طلبات التنسيق الفردية
- عرض رأس التنسيقات:
"Displaying time in requested formats:" - لكل طلب تنسيق، قم بعرض معلومات الوقت وفقاً للتنسيق المحدد:
- لـ
"full": عرض"Full timestamp: [complete_time_object]" - لـ
"date": عرض"Date only: [year]-[month]-[day]"(استخدم مكونات تابع Date()) - لـ
"time": عرض"Time only: [hour]:[minute]:[second]"(استخدم توابع Hour()، Minute()، Second()) - لـ
"year": عرض"Year: [year_value]"(استخدم تابع Year()) - لـ
"month": عرض"Month: [month_name]"(استخدم تابع Month()) - لـ
"day": عرض"Day: [day_value]"(استخدم تابع Day()) - لـ
"weekday": عرض"Weekday: [weekday_name]"(استخدم تابع Weekday()) - لـ
"unix": عرض"Unix timestamp: [unix_seconds]"(استخدم تابع Unix())
- لـ
- حساب وعرض الإحصائيات:
"=== TIME INFORMATION SUMMARY ===""Total formats displayed: [number_of_formats]""Timestamp components extracted: [number_of_unique_components]"
- عرض تفاصيل إضافية عن الوقت:
"Additional time details:""- Nanoseconds: [nanosecond_value]"(استخدم تابع Nanosecond())"- Location: [timezone_location]"(استخدم تابع Location())"- Is zero time: [true_or_false]"(استخدم تابع IsZero())
- عرض رسالة الإكمال:
"Time tracking completed - all requested formats processed"
استخدم حزمة time للعمل مع كائنات الوقت، وحزمة strings لتقسيم السلسلة النصية المدخلة، وحزمة fmt للإخراج المنسق. تذكر أن time.Now() تعيد كائن time.Time يحتوي على جميع المعلومات حول اللحظة الحالية، ويمكنك استخراج مكونات محددة باستخدام التوابع المختلفة المتاحة في هذا الكائن. يوضح هذا التحدي كيفية التقاط الوقت الحالي واستخراج قطع مختلفة من المعلومات من كائن time.Time واحد.
ورقة مرجعية
للعمل مع التواريخ والأوقات في Go، قم باستيراد حزمة time:
import "time"احصل على الوقت الحالي باستخدام time.Now():
now := time.Now()
fmt.Println(now)تُرجع الدالة time.Now() كائنًا من نوع time.Time يمثل اللحظة الحالية، بما في ذلك السنة والشهر واليوم والساعة والدقيقة والثانية والنانو ثانية ومعلومات المنطقة الزمنية.
استخرج مكونات محددة من كائن time.Time باستخدام الطرق (methods):
now := time.Now()
year := now.Year()
month := now.Month()
day := now.Day()
hour := now.Hour()
minute := now.Minute()
second := now.Second()
nanosecond := now.Nanosecond()
weekday := now.Weekday()
unix := now.Unix()
location := now.Location()
isZero := now.IsZero()جرّب بنفسك
package main
import (
"fmt"
"strings"
"time"
)
func main() {
// قراءة المدخلات
var formatRequests string
fmt.Scanln(&formatRequests)
// استخدام وقت ثابت للحصول على مخرجات متسقة (وقت مرجع Go)
// بدلاً من time.Now()، استخدم time.Date للحصول على نتائج متوقعة
currentTime := time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC)
// تقسيم طلبات التنسيق
formats := strings.Split(formatRequests, ",")
// TODO: اكتب الكود الخاص بك أدناه
// عرض ترويسة التطبيق
// عرض تأكيد التقاط الطابع الزمني
// عرض ترويسة التنسيقات
// معالجة كل طلب تنسيق وعرضه وفقاً لذلك
// استخدام خريطة (map) لتتبع المكونات الفريدة للعد
// استخدام التنسيق المناسب (على سبيل المثال، %02d للأرقام المبطنة بالأصفار)
// عرض إحصائيات الملخص
// عرض تفاصيل الوقت الإضافية
// عرض رسالة الإكمال
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات7معالجة الأخطاء بعمق
أنواع الأخطاء المخصصةتغليف الأخطاء باستخدام `%w`فك التغليف باستخدام `errors.Is`فك التغليف باستخدام `errors.As`فهم `panic`استخدام `recover`ملخص - القسمة الآمنة10التعامل مع الوقت
الحصول على الوقت الحاليإنشاء وقت محددتنسيق الوقتتحليل النصوص الزمنيةالمدة الزمنيةالعمليات الحسابية على الوقتالانتظار والـ Tickersمراجعة - مؤقت بسيط2الـ Structs والميثودز (Methods)
تعريف الـ Methods على الـ Structsالـ Value Receiversالـ Pointer Receiversاختيار الـ Receiversالـ Methods مقابل الـ Functionsملخص - سلوك الـ Struct5تعمق في الـ Maps
Maps من نوع Structsالـ Pointers كقيم في الـ Mapsالتحقق من الـ Nil Mapsمقارنة الـ Mapsمراجعة - عداد تكرار الكلمات3الواجهات (الأساسيات)
ما هي الواجهة؟تعريف الواجهةتطبيق الواجهةاستخدام أنواع الواجهاتالواجهة الفارغةتأكيدات النوع (Type Assertions)تبديل النوع (Type Switch)ملخص - الأشكال والسلوكيات