זמן תאריך C ++


C ++ יורש סוגי נתונים לזמן משפת C. כדי להשתמש בסוגי נתונים אלה בתוכנית שלך עליך לכלול זמן כּוֹתֶרֶת:

#include <ctime>

כותרת זו מספקת 4 סוגי נתונים המשמשים לייצוג זמן:

  • שעון_ט - סוג שעון
  • גודל_ט - סוג אינטגרלי לא חתום
  • זמן_ט - סוג זמן
  • מבנה tm - מבנה זמן

שלושת סוגי הנתונים הראשונים מייצגים זמן כמספרים שלמים ותצטרך להמיר מספרים שלמים אלה כדי לקבל ייצוג זמן נפוץ.
הדרך הכי ידידותית למשתמש לייצוג זמן יש struct tm. מהו מבנה נדון ב מבני נתונים C ++ . ה tm מכיל את השדות הבאים המייצגים זמן:

 שדה סוּג  משמעות  טווח
 tm_sec int שניות 0-61
 tm_min int דקות 0-59
 tm_hour int שעות 0-23
 tm_mday int יום בחודש 1-31
 tm_mon int חודשים מאז ינואר 0-11
 tm_year int שנים מאז 1900
 tm_wday int ימים מאז יום ראשון 0-6
 tm_day int ימים מאז 1 בינואר 0-365

 

להשתמש במשתנה מסוג tm אתה יכול להכריז על אותה הדרך בה אתה מכריז על כל משתנה:

tm my_time;

ctime כותרת מספקת מגוון פונקציות שימושיות לעבודה עם סוגי נתונים:

  • char * asctime (const struct tm * timeptr); ממיר מצביע ל struct tm למערך של תווים
  • char * ctime (const time_t * טיימר); ממיר ערך של a זמן_ט ערך למערך char בתבנית Www Mmm dd hh: mm: ss yyyy (Www - weekday, Mmm - month, dd - day of week, dd - date, mm - minutes, ss- seconds, hh - hours, yyyy - שָׁנָה).
  • struct tm * gmtime (const time_t * timer); להמיר א זמן_ט ערך struct tm  כמו שעון UTC.
  • struct tm * localtime (const time_t * timer); להמיר א זמן_ט ערך struct tm  במתכונת זמן מקומית.
  • size_t strftime (char * ptr, size_t maxsize, const char * format, const struct tm * timeptr); פונקציות זה מעתיק את ערך הזמן של timeptr פי פוּרמָט למערך של חרמש ptr בגודל מרבי גודל מקסימלי.

מפרטי הפורמט העיקריים לפונקציה זו הם:

 מפרט משמעות
 %a שם יום חול מקוצר
 %A שם יום חול מלא
 %b שם חודש מקוצר
 %B שם חודש מלא
 %c ייצוג תאריך ושעה
 %C שנה מחולקת ב 100 וקטומה למספר שלם (00-99)
 %d יום החודש עם שתי ספרות (2-01)
 %D תאריך MM / DD / YY קצר, שווה ערך ל-% m /% d /% y
 %e יום החודש מרופד בחלל (1-31)
 %F תאריך YYYY-MM-DD קצר, שווה ערך ל-% Y-% m-% d
 %g שנה לפי שבוע, שתי ספרות אחרונות (00-99)
 %G שנה מבוססת שבוע
 %h שם חודש מקוצר (זהה ל-% b)
 %H שעה בתבנית 24 שעות (00-23)
 %I שעה בתבנית 12 שעות (01-12)
 %j יום השנה (001-366)
 %m חודש כמספר עשרוני (01-12)
 %M דקה (00-59)
 %p ייעוד AM או PM
 %R 24 שעות HH: זמן MM, שווה ערך ל-% H:% M
 %S שני (00-61)

 

  • clock_t clock (void); - מחזיר את הזמן שנצרך על ידי התוכנית מהשקתה. ערך ההחזרה הוא מספר קרציות השעון. אתה יכול להמיר ערך זה לשניות באמצעות קבוע CLOCKS_PER_SEC.
  • time_t mktime (struct tm * timeptr); - סודות מבנה ה- tm  ל זמן_ט.
  • time_t time (time_t* timer); - מקבל את הזמן הנוכחי במתכונת של  זמן_ט באמצעות טיימר. אתה יכול להשתמש ב- NULL כפרמטר לפונקציה זו: זמן (NULL)

שימוש בפונקציות אלה עם מהדרים מודרניים יכול להוביל להודעת שגיאה:

"שגיאה C4996: 'זמן זמן': פונקציה או משתנה זה עשוי להיות לא בטוח. שקול להשתמש במקום זאת ב- ctime_s. כדי להשבית את ההוצאה משימוש, השתמש ב _CRT_SECURE_NO_WARNINGS. ”

אם אתה בטוח שהתוכנית שלך בטוחה, תוכל להשבית שגיאה זו באמצעות ההנחיה הבאה:

#pragma warning(disable : 4996)

זוהי תוכנית הדגמה פשוטה המציגה כיצד ניתן לעבוד עם הזמן באמצעות פונקציות המתוארות:

//get the starting value of clock
clock_t start = clock();
tm* my_time;


//get current time in format of time_t
time_t t = time(NULL);


//show the value stored in t
cout << "Value of t " << t << endl;

//convert time_t to char*
char* charTime = ctime(&t);

//display current time
cout << "Now is " << charTime << endl;

//convert time_t to tm
my_time = localtime(&t);

//get only hours and minutes
char* hhMM = new char[6];
strftime(hhMM, 6, "HH:MM", my_time);

//show a part of tm struct
//the operator -> is used to access members of the tm struct. It's described in the data structures topic
cout << "Year " << 1900 + my_time->tm_year << endl;
cout << "Month " << my_time->tm_mon << endl;
clock_t end = clock();
clock_t exec = end - start;
cout << "Program is executed in " << exec << " clocks or "
<< 1000 * exec / CLOCKS_PER_SEC << " milliseconds" << endl;
cin.ignore();

התפוקה של תוכנית זו היא:

ערך t 1417965525
עכשיו יום ראשון 07 בדצמבר 17:18:45 2014
שנת 2014
חודש 11
התוכנית מבוצעת תוך 6 שעונים או 6 אלפיות השנייה