Menu
Coddy logo textTech

עיצוב זמן

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 60 מתוך 68.

ברגע שיש לך אובייקט time.Time, לעיתים קרובות תצטרך להמיר אותו לפורמט מחרוזת קריא. Go משתמשת בגישה ייחודית לעיצוב זמן, השונה מזו של שפות תכנות אחרות.

במקום להשתמש בקודי עיצוב כמו %Y-%m-%d, Go משתמשת בתאריך ייחוס כתבנית. תאריך הייחוס הזה הוא Mon Jan 2 15:04:05 MST 2006, שמייצג את הרגע המדויק: 2 בינואר 2006, בשעה 3:04:05 אחר הצהריים לפי שעון ההרים הסטנדרטי.

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 לקל לזכירה וגמיש. ברגע שזוכרים את תאריך הייחוס, אפשר ליצור כל פורמט פשוט על ידי סידור הרכיבים שלו בתבנית הרצויה.

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, המבוססת על תבניות, בכך שתיישמו כמה תבניות עיצוב שונות על אותו אובייקט זמן.

נסו בעצמכם

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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Go אונליין