در این جلسه به بررسی تاریخ و ساعت در ++C می پردازیم. کتابخانه استاندارد ++C، نوع داده مناسبی برای تاریخ و ساعت تهیه نکرده است. ++C ساختارها (struct) و توابع مربوط به تاریخ و ساعتی که در زبان C پیاده شده است را اتخاذ کرده است. برای دسترسی به ساختارها و توابع مربوط به تاریخ و ساعت، باید هدرفایل <ctime> را به برنامه ++C ضمیمه کنید.
چهار نوع داده مرتبط وجود دارد: clock_t، time_t، size_t و tm.
clock_t، time_t، size_t برای بیان تاریخ و ساعت سیستم به شکل عدد صحیح استفاده میشود. ساختار نوع tm تاریخ و ساعت را به شکل ساختار C با عناصر زیر ذخیره میکند:
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 و ++C هستند. جزئیات مربوط به این توابع را میتوان با مراجعه به مرجع کتابخانههای استاندارد ++C بررسی کرد.
| ردیف | توابع و هدف استفاده | 
| 1 | ;(time_t time(time_t *time این تابع زمان فعلی تقویم سیستم را از 1 ژانویه 1970، به ثانیه بر میگرداند. اگر سیستم زمان نداشته باشد، مقدار 1 را برمیگرداند. | 
| 2 | ;(char *ctime(const time_t *time این تابع یک اشارهگر به یک رشته به فرم زیر رابرمیگرداند. «day month year hours:minutes:seconds year\n\0» | 
| 3 | ;(struct tm *localtime(const time_t *time این تابع یک اشارهگر به یک ساختار نوع tm ، برای بیان ساعت محلی برمیگرداند. | 
| 4 | ;(clock_t clock(void این تابع مقداری برمیگرداند که بیان کننده زمان تقریبی است که برنامه فراخواننده در حال اجرا بوده است. | 
| 5 | ;(char * asctime ( const struct tm * time این تابع یک اشارهگر به رشته ای برمیگرداند که حاوی اطلاعاتی است که در ساختاری ذخیره شده که زمان را به فرم زیر تبدیل میکند. «month date hours:minutes:seconds year\n\0» | 
| 6 | ;(struct tm *gmtime(const time_t *time این تابع اشارهگری به یک زمان در ساختار tm برمیگرداند. زمان در مختصات زمان جهانی (UTC)، یعنی زمان گرینویچ (GMT) بیان میشود. | 
| 7 | ;(time_t mktime(struct tm *time این تابع تقویم-ساعت معادل در زمان یافت شده در ساختار مورد اشاره time را برمیگرداند. | 
| 8 | ;(double difftime ( time_t time2, time_t time1 این تابع اختلاف بین time1 و time2 را محاسبه میکند. | 
| 9 | ;(size_t strftime) این تابع برای فرمت دهی زمان و تاریخ در فرمت مشخص قابل استفاده است. | 
تاریخ و ساعت جاری
فرض کنید قرار است که تاریخ و ساعت فعلی را چه به وقت محلی و چه به وقت مختصات جهانی بدست آورید. مثال زیر نحوه محاسبه آن را نشان میدهد.
#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; }
با اجرای این کد، خروجی زیر نتیجه میشود.
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 بسیار حائز اهمیت است. همانطور که گفتیم، این ساختار تاریخ و ساعت را به صورت ساختاری از زبان C ذخیره میکند. مثال زیر توابع و ساختارهای مختلف مربوط به تاریخ و ساعت را به کار میبرد.
هنگامیکه در این بخش در مورد ساختار صحبت میکنیم، فرض میشود که شما دانش ابتدایی در مورد ساختار در C و چگونگی دسترسی به اعضای ساختار با استفاده از عملگر «<-» را دارید.
#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:" << 1900 + 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:1563027637 Year2019 Month: 7 Day: 13 Time: 15:21:38
منبع: ترجمه از سایت tutorialspoint.com
امیدواریم آموزش تاریخ و ساعت در ++C براتون مفید واقع شده باشه. در جلسات بعدی آموزش زبان ++C با ما همراه باشید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
 آموزش طراحی و ساخت پروژه های الکترونیک و برنامه نویسی میکروکنترلر ها آموزش الکترونیک,آموزش رزبری پای,آموزش راه اندازی ماژول و سنسور,آموزش آردوینو,نرم افزار های الکترونیک, طراحیPCB,برنامه نویسی میکروکنترلرها ARM AVR PIC FPGA
آموزش طراحی و ساخت پروژه های الکترونیک و برنامه نویسی میکروکنترلر ها آموزش الکترونیک,آموزش رزبری پای,آموزش راه اندازی ماژول و سنسور,آموزش آردوینو,نرم افزار های الکترونیک, طراحیPCB,برنامه نویسی میکروکنترلرها ARM AVR PIC FPGA  
   
  