کار با تاریخ و زمان در C++
کتابخانه استاندارد C++ نوع مناسبی برای تاریخ ارائه نمی کند. زبان C++ ساختارها و توابع مربوط به تاریخ و زمان را از زبان برنامه نویسی C به ارث می برد. به منظور دسترسی به این ساختارها و توابع باید هدر فایل <ctime> را به برنامه خود اضافه کنید.
چهار نوع داده مربوط به زمان وجود دارد که عبارت اند از: clock_t، time_t، size_t و tm. انواع clock_t، size_t و time_t می توانند زمان و تاریخ سیستم را به صورت عدد صحیح نشان دهند.
ساختار مربوط به tm را در زیر مشاهده می کنید:
struct tm { int tm_sec; // seconds of minutes from 0 to 61 int tm_min; // minutes of hour from 0 to 59 int tm_hour; // hours of day from 0 to 24 int tm_mday; // day of month from 1 to 31 int tm_mon; // month of year from 0 to 11 int tm_year; // year since 1900 int tm_wday; // days since sunday int tm_yday; // days since January 1st int tm_isdst; // hours of daylight savings time }
در جدول زیر توابع مهمی که هنگام کار با تاریخ و زمان در زبان C++ استفاده می کنیم را مشاهده می کنید. همه این توابع بخشی از کتابخانه استاندارد C/C++ هستند.
ردیف | توضیحات |
۱ | time_t time(time_t *time)
این تابع زمان تقویم فعلی سیستم را در تعداد ثانیه ای که از ۱ ژانویه ۱۹۷۰ سپری شده است را باز میگرداند. اگر سیستم زمان نداشته باشد، مقدار ۱ باز میگرداند. |
۲ | char *ctime(const time_t *time)
این تابع تاریخ را در فرمت “day month year hours:minutes:seconds year\n\0” باز میگرداند. |
۳ | struct tm *localtime(const time_t *time)
این تابع یک اشاره گر از نوع ساختار tm باز میگرداند و زمان محلی را نشان می دهد. |
۴ | clock_t clock(void)
این تابع به صورت تقریبی زمان سپری شده از موقعی که یک برنامه فراخوانی شده اجرا می شود را باز میگرداند. اگر این زمان در دسترس نباشد، مقدار ۱ باز میگرداند. |
۵ | char * asctime ( const struct tm * time )
این تابع اطلاعات ذخیره شده در ساختار tm را به صورت رشته و با فرمت “day month date hours:minutes:seconds year\n\0” باز میگرداند. |
۶ | struct tm *gmtime(const time_t *time)
این تابع زمان داده شده را به زمان تقویمی تبدیل می کند که به عنوان UTC بیان می شود. |
۷ | time_t mktime(struct tm *time)
این تابع مقدار معادل زمان تقویم محلی در ساختار مشخص شده توسط زمان را باز میگرداند. |
۸ | double difftime ( time_t time2, time_t time1 )
این تابع اختلاف زمانی بین time1 و time2 را بر حسب ثانیه باز میگرداند. |
۹ | size_t strftime()
این تابع برای فرمت بندی تاریخ و زمان در فرمت های مشخص استفاده می شود. |
تاریخ و زمان فعلی
در برنامه نویسی ممکن است وضعیتی پیش آید که بخواهد تاریخ و زمان سیستم را بدانید. مثال زیر نشان می دهد که می توان با استفاده از توابع مربوط به تاریخ و زمان موجود در کتابخانه زبان C تاریخ زمان فعلی سیستم را بدست آورد.
#include <iostream> #include <ctime> using namespace std; int main() { // current date/time based on current system time_t now = time(0); // convert now to string form char* dt = ctime(&now); cout << "The local date and time is: " << dt << endl; // convert now to tm struct for UTC tm *gmtm = gmtime(&now); dt = asctime(gmtm); cout << "The UTC date and time is:"<< dt << endl; }
امتحان کنید
زمانی که کد بالا توسط کامپایلر زبان C++ اجرا شود، نتیجه زیر را تولید خواهد کرد:
The local date and time is: Sat Jan 8 20:07:41 2011 The UTC date and time is:Sun Jan 9 03:07:41 2011
استفاده از ساختار tm برای فرمت بندی زمان
در زبان برنامه نویسی C/C++ ساختار tm از اهمیت بالایی برخوردار است. همان که در بالا ذکر شد، اکثر توابع مربوط به تاریخ و زمان از این ساختار استفاده می کنند. در مثال زیر از توابع مختلف و همچنین ساختار tm استفاده شده است.
اگر مبحث اشاره گرها و ساختار را مطالعه کرده باشید، می دانید که برای دسترسی به اعضای یک اشاره گر به ساختار باید از عملگر -> استفاده کنید.
#include <iostream> #include <ctime> using namespace std; int main() { // current date/time based on current system time_t now = time(0); cout << "Number of sec since January 1,1970:" << now << endl; tm *ltm = localtime(&now); // print various components of tm structure. cout << "Year" << 1970 + ltm->tm_year<<endl; cout << "Month: "<< 1 + ltm->tm_mon<< endl; cout << "Day: "<< ltm->tm_mday << endl; cout << "Time: "<< 1 + ltm->tm_hour << ":"; cout << 1 + ltm->tm_min << ":"; cout << 1 + ltm->tm_sec << endl; }
امتحان کنید
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
Number of sec since January 1, 1970:1294548238 Year: 2011 Month: 1 Day: 8 Time: 22: 44:59
نوشته کار با تاریخ و زمان در C++ – آموزش زبان C++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.