פרק 9: המילניום - ניהול זמן ותאריךהתעמלות עם Date::Manipלמעשה, ישנם מספר מודולי Perl המתמחים במניפולציות על הזמן, ובינהם Date::Calc, Date::Format, Date::Parse ו Date::Manip שבו נשתמש הפעם. כל המודולים הללו מצויים באתר של CPAN. לכל מודול ישנם הסינטקס והיכולות שלו, החופפת במקרים מסויימים. אנו נתמקד ב Date::Manip כיוון שזהו המודול החזק ביותר, הקל ביותר להבנה, והקל ביותר להתקנה הן על גרסת חלונות והן על גרסת יוניקס. החסרון הפעוט של Date::Manip הוא שזהו מודול איטי יותר ופחות אפקטיבי מחלק מהמודולים האחרים. פרט זה לא מהווה בעיה גדולה אלא אם כן אתם משתמשים בחישובי זמן רבים מאוד. למרות של Date::Manip יש פעולות רבות הקשורות בעיבוד זמן, אנו נתמקד בהתחלה בניתוח (parsing) של תאריכים ידידותיים למשתמש. בני אדם, בהיותם נבדלים אחד מהשני כותבים תאריכים במיליון ואחד דרכים שונות: "15APRIL 1980, pm5", או "4/15/1980 5:00", או "15 Apr 1980 5 PM" וכו'. בכדי להכביד על הבעיה האמריקאים והאירופאים הופכים לעיתים קרובות את המיקום של החודש והיום בחודש, והקנדים אשר משתמשים בשתי השיטות וגורמים לבלגן גדול ("השישי למרץ, או השלישי ליוני??"). מודול ה Date::Manip מכיל את הפונקציה ParseDate& , אשר עושה את המיטב בכדי להתמודד עם מגוון מחרוזות התאריך האפשריות. הדוגמא למטה מניחה שהורדתם והתקנתם את מודול ה Date::Manip . לפני שנתחיל אזהרה: Date::Manip צריכה לקבוע את אזור הזמן בו מחשבכם נמצא, והיא תנסה לעשות זאת במגוון דרכים. במידה והיא תיכשל, תקבלו הודעת שגיאה. המסמכים הנלווים למודול מכילים מספר הצעות לסיפוק אזור הזמן למודול הזה, ואנו כללנו את אחת הטכניקות הללו בדוגמא, בeastern standard time (זמן תקני במזרח ארה"ב - EST). אין לכם צורך לכלול את שורת הקוד לאזור הזמן אם Date::Manip מסוגל לגלות זאת בדרך אחרת. use Date::Manip; #time zone info (if necessary) &Date_Init("TZ=EST"); $someday="November 15th, 1999 12:30PM EST"; $parsed=&ParseDate($someday); המודול יקרא את המחרוזת someday$ וישלוף את האינפורמציה הרלוונטית. מידע זה ישמר במשתנה parsed$ בפורמט הפנימי בו Date::Manip מציגה את הזמן. על ידי שימוש במשתנה parsed$ אנו יכולים לבצע שינויים מגוונים, בעזרת הפונקציות המוכלות ב Date::Manip. מטרתנו עתה היא להפוך את התאריך לזמן שניות תקופתי, מה שיהווה סיכום של כל מה שדיברנו עליו במאמר זה עד כה. אחת הפונקציות המוצעות על ידי Date::Manip היא UnixDate&, אשר הופכת את התאריך לפורמט יוניקס. אנו יכולים לנצל זאת על מנת לתרגם את התאריך ב parsed$ לזמן שניות תקופתי של יוניקס. $epoch=&UnixDate($parsed,"%s"); והוכחה: print scalar localtime($epoch); פולטת: Mon Nov 15 12:30:00 1999 למען הבהירות אנו יכולים לכווץ את כל התרגום מפורמט אנושי לזמן שניות תקופתי בשורת קוד אחת בלבד (חציית השורה נעשית בכדי להתאים לפורמט העמוד ומסיבה זו בלבד). print scalar localtime( &UnixDate( &ParseDate("November 15th, 1999 12:30PM EST"), "%s") ); להפוך את הזמן
|