זמן

time#

מחזיר את זמן ה־wall-clock הנוכחי כמספר שלם של שניות מאז epoch המערכת.

time הוא נקודת ההתחלה לכל פעולת תאריך וזמן אחרת ב־Perl. הוא קורא את שעון המערכת ומחזיר מספר שלם יחיד - מספר השניות הלא־מעוברות מאז ה־epoch, שהוא בכל פלטפורמה נתמכת 00:00:00 UTC, 1 January 1970 (זמן Unix). התוצאה מתאימה להזנה ישירה ל־gmtime או localtime כדי לפרק אותה לתאריך קלנדרי, או לחיסור שתי קריאות כדי למדוד זמן שעבר.

תקציר#

time

מה מקבלים בחזרה#

מספר שלם פשוט: שניות מאז 1970-01-01 00:00:00 UTC, מקוצץ (לא מעוגל) לכיוון אפס. אין דיוק תת־שנייתי - שתי קריאות באותה שנייה מחזירות את אותו ערך. לגרנולריות במילישנייה או מיקרושנייה, השתמש ב־Time::HiRes::time.

time אינו מקבל ארגומנטים; המילה החשופה היא הקריאה כולה. כתיבת time() גם בסדר ולעיתים ברורה יותר ליד קריאות פונקציה אחרות.

דוגמאות#

קריאה גולמית של השעון:

my $now = time;
print "$now\n";                       # e.g. 1745424000

תאריך וזמן מקומיים קריאים לבן־אנוש - time משתלב עם localtime בהקשר סקלר עבור מחרוזת מעוצבת:

print scalar localtime, "\n";         # Wed Apr 23 12:00:00 2026

אותה קריאה מפורקת לשדות לאריתמטיקה קלנדרית:

my ($sec, $min, $hour, $mday, $mon, $year) = localtime time;
$year += 1900;
$mon  += 1;
printf "%04d-%02d-%02d %02d:%02d:%02d\n",
       $year, $mon, $mday, $hour, $min, $sec;

מדידת זמן־שעבר סביב בלוק של עבודה - הסטופר הניבי בשנייה־שלמה:

my $t0 = time;
do_work();
my $elapsed = time - $t0;
print "took ${elapsed}s\n";

UTC במקום זמן מקומי - הזן את אותו מספר שלם ל־gmtime:

my @utc = gmtime time;                # same fields, UTC-based
print scalar gmtime, "\n";            # Wed Apr 23 10:00:00 2026

מקרי קצה#

  • אין רזולוציה תת־שנייתית. קריאות גב־אל־גב באותה שנייה מחזירות את אותו מספר שלם, כך ש־time - $t0 עבור עבודה מהירה מדפיס 0. השתמש ב־Time::HiRes::time עבור קריאת נקודה־צפה עם דיוק מיקרושנייה:

    use Time::HiRes qw(time);
    my $t0 = time;                      # now a float
    do_work();
    printf "%.6f s\n", time - $t0;
    
  • שניות מעוברות. הספירה המוחזרת אינה כוללת שניות מעוברות; זה ״שניות מאז ה־epoch״ של POSIX כפי שמדווח על־ידי הקרנל. קוד שמחסר שתי קריאות time מודד שניות wall-clock שעברו, לא שניות SI, על־פני גבול של שנייה מעוברת.

  • רוחב מספר שלם. הערך הוא מספר שלם עם סימן רחב מספיק עבור חותמות זמן נוכחיות ועתידיות־רחוקות בכל פלטפורמה נתמכת (64־ביט). בעיית 2038 אינה חלה כאן.

  • אזור זמן. time עצמו אגנוסטי לאזור זמן - המספר השלם מציין רגע יחיד ב־UTC. אזורי זמן נכנסים לתמונה רק כשממירים דרך localtime; gmtime נשאר ב־UTC.

  • מונוטוניות. time עוקב אחר שעון המערכת. אם השעון מקודם אחורה (התאמת NTP, שינוי ידני), קריאה מאוחרת יותר עשויה להחזיר ערך קטן יותר מקריאה מוקדמת יותר. למדידות של זמן שעבר שאסור להן ללכת אחורה, השתמש בשעון מונוטוני דרך Time::HiRes::clock_gettime(CLOCK_MONOTONIC).

  • באריתמטיקה. time + 3600 הוא שעה מעכשיו; time - 86400 הוא 24 שעות לפני. הזן את התוצאה ל־localtime או gmtime כדי להציג אותה.

הבדלים מ־upstream#

תואם מלא ל־upstream Perl 5.42.

ראו גם#

  • gmtime - מפרק ערך time לשדות קלנדריים של UTC (או מחרוזת מעוצבת בהקשר סקלר)

  • localtime - אותו דבר, אך באזור הזמן המקומי; השותף הנפוץ ביותר ל־time

  • sleep - משהה למספר שלם של שניות; משתלב באופן טבעי עם time לתזמון גס

  • alarm - מתזמן SIGALRM למספר נתון של שניות בעתיד

  • Time::HiRes::time - שניות נקודה־צפה עם רזולוציית מיקרושנייה כשגרנולריית שנייה־שלמה אינה מספיקה