קבלת הזמן הנוכחי
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-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.
נסו בעצמכם
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 למספרים המרופדים באפסים)
// הצג נתונים סטטיסטיים מסכמים
// הצג פרטי זמן נוספים
// הצג הודעת סיום
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה7טיפול בשגיאות לעומק
סוגי שגיאות מותאמים אישיתעטיפת שגיאות באמצעות `%w`חילוץ שגיאות באמצעות `errors.Is`חילוץ שגיאות באמצעות `errors.As`הבנת `panic`שימוש ב־`recover`סיכום — חלוקה בטוחה10עבודה עם זמן
קבלת הזמן הנוכחייצירת זמן מסויםעיצוב זמןניתוח מחרוזות זמןמשך זמןחישובים עם זמןהשהיה וטיקריםסיכום - טיימר פשוט2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאיתרגלו בעצמכם: קומפיילר Go אונליין