Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

إنشاء وقت محدد

جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 59 من 68.

بينما تمنحك time.Now() اللحظة الحالية، ستحتاج غالباً إلى التعامل مع تواريخ وأوقات محددة. توفر لغة Go دالة time.Date لإنشاء كائن time.Time يمثل أي تاريخ ووقت تحدده.

تأخذ الدالة time.Date سبعة معاملات بهذا الترتيب تماماً: السنة، والشهر، واليوم، والساعة، والدقيقة، والثانية، والنانو ثانية، والموقع. إليك الصيغة الأساسية:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

لاحظ أن Go تستخدم ثوابت مثل time.March للأشهر، مما يجعل كودك أكثر قابلية للقراءة من استخدام الأرقام. يمكنك أيضًا استخدام الأعداد الصحيحة (1-12) إذا كنت تفضل ذلك. عادةً ما تستخدم معلمة الموقع (location parameter) time.UTC لتوقيت UTC أو time.Local للمنطقة الزمنية المحلية لنظامك.

يمنحك هذا النهج تحكماً كاملاً في إنشاء أي لحظة زمنية محددة، سواء كانت عيد ميلاد، أو موعداً نهائياً، أو تاريخاً تاريخياً. يعمل كائن time.Time الناتج تماماً مثل الكائن الناتج من time.Now() ويمكن استخدامه مع جميع العمليات الزمنية نفسها.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

challenge icon

التحدي

سهل

قم بإنشاء تطبيق للجدول الزمني للأحداث التاريخية يستخدم time.Date لتمثيل تواريخ وأوقات محددة من التاريخ. سيختبر هذا التحدي قدرتك على إنشاء كائنات time.Time للحظات تاريخية دقيقة وعرضها بتنسيق منظم.

ستتلقى مدخلين:

  • سلسلة نصية تحتوي على أحداث تاريخية بالتنسيق "event1:year:month:day:hour:minute,event2:year:month:day:hour:minute" (على سبيل المثال، "Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0")
  • سلسلة نصية تحتوي على خيارات العرض مفصولة بفاصلة بالتنسيق "option1,option2,option3" (على سبيل المثال، "chronological,details,summary")

مهمتك هي:

  1. تحليل المدخل الأول عن طريق التقسيم عند الفواصل للحصول على إدخالات الأحداث الفردية
  2. لكل إدخال حدث، قم بالتقسيم عند النقطتين الرأسيتين لاستخراج اسم الحدث، السنة، الشهر، اليوم، الساعة، والدقيقة
  3. تحويل السلاسل الرقمية إلى أعداد صحيحة وإنشاء كائن time.Time باستخدام time.Date لكل حدث (استخدم time.UTC لمعلمة الموقع و 0 للثواني والنانو ثانية)
  4. عرض رأس التطبيق: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. عرض تأكيد تحميل الأحداث: "Loading historical events..."
  6. لكل حدث، اعرض: "Loaded: [event_name] - [complete_time_object]"
  7. تحليل المدخل الثاني عن طريق التقسيم عند الفواصل للحصول على خيارات العرض
  8. معالجة كل خيار عرض:
    • بالنسبة لـ "chronological": اعرض "=== CHRONOLOGICAL ORDER ===" متبوعاً بالأحداث مرتبة حسب التاريخ (الأقدم أولاً)، مع إظهار "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC"
    • بالنسبة لـ "details": اعرض "=== DETAILED INFORMATION ===" متبوعاً بكل حدث يظهر:
      • "Event: [event_name]"
      • " Date: [year]-[month]-[day]"
      • " Time: [hour]:[minute] UTC"
      • " Weekday: [weekday_name]"
      • " Unix timestamp: [unix_seconds]"
    • بالنسبة لـ "summary": اعرض "=== TIMELINE SUMMARY ===" متبوعاً بـ:
      • "Total events: [number_of_events]"
      • "Earliest event: [earliest_event_name] ([year])"
      • "Latest event: [latest_event_name] ([year])"
      • "Time span: [years_between_earliest_and_latest] years"
    • بالنسبة لـ "years": اعرض "=== EVENTS BY DECADE ===" متبوعاً بالأحداث مجمعة حسب العقد، مع إظهار "[decade]s: [comma_separated_event_names]"
  9. عرض رسالة الإكمال: "Historical timeline processing completed"

استخدم حزمة time لإنشاء تواريخ محددة باستخدام time.Date، وحزمة strings لتقسيم سلاسل الإدخال، وحزمة strconv لتحويل أرقام السلاسل إلى أعداد صحيحة، وحزمة fmt للإخراج المنسق. تذكر أن time.Date يأخذ المعلمات بالترتيب الدقيق: السنة، الشهر، اليوم، الساعة، الدقيقة، الثانية، النانو ثانية، الموقع. للترتيب الزمني، يمكنك مقارنة كائنات time.Time باستخدام طريقة Before(). يوضح هذا التحدي كيفية إنشاء لحظات محددة في الوقت والعمل مع البيانات التاريخية باستخدام وظائف الوقت في Go.

ورقة مرجعية

استخدم time.Date لإنشاء كائن time.Time لتاريخ ووقت محددين:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

تأخذ الدالة time.Date سبعة معاملات بالترتيب الدقيق:

  • السنة (int)
  • الشهر (time.Month أو int 1-12)
  • اليوم (int)
  • الساعة (int)
  • الدقيقة (int)
  • الثانية (int)
  • النانو ثانية (int)
  • الموقع (*time.Location)

استخدم ثوابت الأشهر مثل time.March لسهولة القراءة، أو الأعداد الصحيحة (1-12). المواقع الشائعة هي time.UTC و time.Local.

جرّب بنفسك

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	// قراءة المدخلات باستخدام bufio.Scanner للتعامل مع المسافات بشكل صحيح
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	eventsInput := scanner.Text()
	
	scanner.Scan()
	optionsInput := scanner.Text()
	
	// تحليل الأحداث من المدخلات
	eventEntries := strings.Split(eventsInput, ",")
	
	// تحليل خيارات العرض من المدخلات
	displayOptions := strings.Split(optionsInput, ",")
	
	// TODO: اكتب الكود الخاص بك أدناه
	// 1. قم بتحليل كل إدخال حدث لاستخراج الاسم، السنة، الشهر، اليوم، الساعة، والدقيقة
	// 2. تذكر التحقق مما إذا كانت شريحة الأجزاء تحتوي على عناصر كافية قبل الوصول إليها
	// 3. قم بتحويل الأرقام النصية إلى أعداد صحيحة باستخدام strconv.Atoi()
	// 4. قم بإنشاء كائنات time.Time باستخدام time.Date() لكل حدث
	// 5. عرض ترويسة التطبيق ورسائل التحميل
	// 6. معالجة كل خيار عرض (التسلسل الزمني، التفاصيل، الملخص، السنوات)
	// 7. عرض رسالة الإتمام
	
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow