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

تنسيق الوقت

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

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

بدلاً من استخدام أكواد التنسيق مثل %Y-%m-%d، تستخدم لغة Go تاريخاً مرجعياً كقالب. هذا التاريخ المرجعي هو Mon Jan 2 15:04:05 MST 2006، والذي يمثل اللحظة المحددة: الثاني من يناير 2006، في تمام الساعة 3:04:05 مساءً بتوقيت الجبال القياسي (MST).

now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // المخرجات: 2023-10-26

الفكرة الأساسية هي أنك تقوم بترتيب مكونات التاريخ المرجعي بالنمط الذي تريده. لتنسيق YYYY-MM-DD، تستخدم "2006-01-02" لأن هذا هو شكل التاريخ المرجعي في ذلك النمط. لتنسيق مختلف مثل Jan 2, 2006، ستستخدم "Jan 2, 2006".

يجعل هذا النهج القائم على التخطيط تنسيق الوقت في لغة Go سهلاً للتذكر ومرناً في آن واحد. وبمجرد أن تتذكر التاريخ المرجعي، يمكنك إنشاء أي تنسيق ببساطة عن طريق ترتيب مكوناته بالنمط الذي تريده.

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

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

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

  • سلسلة نصية تحتوي على معلومات التاريخ بتنسيق "year:month:day:hour:minute" (على سبيل المثال، "2023:12:25:14:30")
  • سلسلة نصية تحتوي على طلبات التنسيق مفصولة بفاصلة بتنسيق "format1,format2,format3" (على سبيل المثال، "iso,american,european,time12,time24")

مهمتك هي:

  1. تحليل المدخل الأول عن طريق تقسيمه عند النقطتين الرأسيتين لاستخراج قيم السنة والشهر واليوم والساعة والدقيقة
  2. تحويل هذه القيم النصية إلى أعداد صحيحة باستخدام حزمة strconv
  3. إنشاء كائن time.Time باستخدام time.Date مع القيم التي تم تحليلها (استخدم time.UTC للموقع، و 0 للثواني والنانو ثانية)
  4. عرض رأس التطبيق: "=== DATE/TIME FORMATTER ==="
  5. عرض وقت المصدر: "Source time: [complete_time_object]"
  6. تحليل المدخل الثاني عن طريق تقسيمه عند الفواصل للحصول على طلبات التنسيق
  7. عرض رأس التنسيق: "Formatted outputs:"
  8. لكل طلب تنسيق، استخدم سلسلة التخطيط المناسبة مع طريقة Format:
    • لـ "iso": استخدم التخطيط "2006-01-02" واعرض "ISO format: [formatted_result]"
    • لـ "american": استخدم التخطيط "01/02/2006" واعرض "American format: [formatted_result]"
    • لـ "european": استخدم التخطيط "02/01/2006" واعرض "European format: [formatted_result]"
    • لـ "long": استخدم التخطيط "January 2, 2006" واعرض "Long format: [formatted_result]"
    • لـ "time12": استخدم التخطيط "3:04 PM" واعرض "12-hour time: [formatted_result]"
    • لـ "time24": استخدم التخطيط "15:04" واعرض "24-hour time: [formatted_result]"
    • لـ "full": استخدم التخطيط "Monday, January 2, 2006 at 3:04 PM" واعرض "Full format: [formatted_result]"
    • لـ "compact": استخدم التخطيط "20060102" واعرض "Compact format: [formatted_result]"
  9. حساب وعرض الإحصائيات:
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. عرض المعلومات المرجعية:
    • "=== REFERENCE DATE INFO ==="
    • "Go uses reference date: Mon Jan 2 15:04:05 MST 2006"
    • "This represents: January 2nd, 2006 at 3:04:05 PM"
    • "Layout patterns arrange these components as needed"
  11. عرض رسالة الإتمام: "Date formatting completed using Go's layout system"

استخدم حزمة time لعمليات الوقت، وحزمة strings لتقسيم سلاسل المدخلات، وحزمة strconv لتحويل السلاسل النصية إلى أعداد صحيحة، وحزمة fmt للمخرجات المنسقة. تذكر أن تنسيق الوقت في Go يستخدم تاريخ المرجع Mon Jan 2 15:04:05 MST 2006 كقالب، وتقوم بترتيب هذه المكونات في النمط الذي تريده. يوضح هذا التحدي كيفية عمل نظام التنسيق الفريد القائم على التخطيط في Go من خلال جعلك تطبق عدة أنماط تنسيق مختلفة على نفس كائن الوقت.

ورقة مرجعية

تستخدم لغة Go نهجاً فريداً لـ التاريخ المرجعي لتنسيق الوقت: Mon Jan 2 15:04:05 MST 2006

لتنسيق كائن time.Time، استخدم التابع Format مع أنماط تخطيط تعتمد على التاريخ المرجعي:

now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Output: 2023-10-26

أنماط التخطيط الشائعة:

  • "2006-01-02" - تنسيق ISO (YYYY-MM-DD)
  • "01/02/2006" - التنسيق الأمريكي (MM/DD/YYYY)
  • "02/01/2006" - التنسيق الأوروبي (DD/MM/YYYY)
  • "January 2, 2006" - التنسيق الطويل
  • "3:04 PM" - نظام 12 ساعة
  • "15:04" - نظام 24 ساعة
  • "Monday, January 2, 2006 at 3:04 PM" - التنسيق الكامل
  • "20060102" - التنسيق المدمج

المفتاح هو ترتيب مكونات التاريخ المرجعي في النمط الذي تريده.

جرّب بنفسك

package main

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

func main() {
	// قراءة المدخلات
	var dateInput string
	var formatInput string
	fmt.Scanln(&dateInput)
	fmt.Scanln(&formatInput)
	
	// تحليل مكونات التاريخ عن طريق التقسيم عند النقطتين الرأسيتين
	dateComponents := strings.Split(dateInput, ":")
	
	// تحويل المكونات النصية إلى أرقام صحيحة
	year, _ := strconv.Atoi(dateComponents[0])
	month, _ := strconv.Atoi(dateComponents[1])
	day, _ := strconv.Atoi(dateComponents[2])
	hour, _ := strconv.Atoi(dateComponents[3])
	minute, _ := strconv.Atoi(dateComponents[4])
	
	// إنشاء كائن time.Time
	sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
	
	// تحليل طلبات التنسيق
	formatRequests := strings.Split(formatInput, ",")
	
	// TODO: اكتب الكود الخاص بك أدناه
	// عرض ترويسة التطبيق
	// عرض الوقت المصدر
	// معالجة كل طلب تنسيق وعرض المخرجات المنسقة
	// حساب وعرض الإحصائيات
	// عرض المعلومات المرجعية
	// عرض رسالة الإكمال
	
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow