logo


פרק 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")
             );

להפוך את הזמן
תוכן עניינים
התעמלות עם לוח שנה

אודות
תוכן עניינים
פרק 1: ה Perl שאתם צריכים לדעת
פרק 2: קישור Perl לעמודי הרשת
פרק 3: שמירת מצב
פרק 4: HTML בחטף ותבניות (Templates) רשת
פרק 5: עיבוד וניתוח של עמודי רשת
פרק 6: להשתעשע עם בסיסי נתונים מקוונים:אקסס
פרק 7: המודל MySQL
פרק 8: להשתעשע בבסיסי נתונים - GUFE - החזית הכללית והשימושית
פרק 9: המילניום - ניהול זמן ותאריך
זמן ידידותי למשתמש  
הזמן בפרוסות  
להפוך את הזמן  
התעמלות עם Date::Manip  
התעמלות עם לוח שנה  
סיכום  
פרק 10: ניהול רשימות והאשים (Hashs)
פרק 11: הפניה להפניה
פרק 12: הכרות עם mod_perl