ТОП 10:

Функції роботи з датою та часом



При розробці програмного забезпечення виникає необхідність роботи з датою та часом. Під датою будемо розуміти рік, місяць, день місяця. Під часом – години, хвилини, секунди та мілісекунди. У програмуванні виникають такі основні задачі роботи з датою, як отримання поточної дати та часу, арифметичні операції з датою та часом, використовуючи структури роботи з датою. Для роботи з датою та часом до головної програми необхідно включити хайдер <time.h>. Для розширеної роботи з функціями часу, а саме робота з мілісекундами, необхідно підключити хайдер <sys\timeb.h>.

Головна структура роботи з датою та часом – це структура tm.

 

Struct tm

{

int tm_sec; /* Секунди */

int tm_min; /* Хвилини */

int tm_hour; /* Години (0--23) */

int tm_mday; /* День місяця (1--31) */

int tm_mon; /* Місяць (0--11) */

int tm_year; /* Рік (календарний рік мінус 1900) */

int tm_wday; /* День тижня (0--6; Неділя = 0) */

int tm_yday; /* День року (0--365) */

int tm_isdst; /* відмінний від 0, якщо світло денне */

};

 

Елементи цієї структури можна проініціалізувати самостійно, або заповнити її поточною датою та часом, що приведено в наступному прикладі.

 

# include <iostream.h>

# include <string.h>

# include <stdio.h>

# include <time.h> //time

# include <sys\timeb.h> // timeb

 

Void main()

{

char str[50];

time_t time1;

struct tm *tm1;

time(&time1); // time1 кількість секунд з 1970 р.

printf("%ld second\n",time1);

tm1 = localtime(&time1);

printf("%d year\n",tm1->tm_year);

printf("%d hour\n",tm1->tm_hour);

printf("%d minutes\n",tm1->tm_min);

printf("%d sec\n",tm1->tm_sec);

 

strcpy(str, asctime(tm1));

printf("%s\n", str);

}

 

У даному прикладі оголошується змінна t1 типу time_t, що є еквівалентним типу даних long. Функція time(), у яку передається вказівка на структуру tm1 (тип tm), повертає кількість секунд, починаючи з 1970-го року. Функція localtime() – генерує з цієї кількості секунд структуру tm1.

Cкажімо, якщо поточна дата – 24 січня 2008 року, а час 14.35.15, тоді буде мати місце наступний результат:

 

1201203428 second

108 year

14 hour

35 minutes

15 sec

 

Зауважимо, що рік розраховується відносно 1900 року, тому змінна year структури tm1 дорівнюватиме 108.

Якщо необхідно отримати дату з часом у якості рядку (масиву символів char) треба використати функцію asctime(), входом у яку є структура типу tm.

Для отримання рядку з датою або з часом використовують функції, відповідно char *_strdate(char*s1), char *_strtime(char*s1).

У наступному прикладі виводиться поточна дата та час.

 

# include <iostream.h>

# include <stdlib.h>

# include <stdio.h>

# include <time.h> //time

# include <sys\timeb.h> // timeb

 

Void main()

{

char buf[15];

_strdate(buf);

cout<<"date "<<buf<<"\n";

_strtime(buf);

cout<<"time "<<buf<<"\n";

}

 

Існують моменти, коли треба деталізувати, включаючи мілісекунди. Особливо це важливо, коли треба перевіряти ефективність за часом тих або інших операцій. З цією метою використовується структура timeb.

 

Struct timeb

{

long time ; //кількість секунд починаючи з 1970 року

short millitm ; // кількість мілісекунд

short _timezone ; // відмінність у хвилинах за Грінвічем та місцевим часом

short dstflag ; // відмінний від 0, якщо світло денне

};

 

Нижче приведемо приклад аналізу, який показує скільки часу треба на те, щоб пройшов порожній цикл з 100000000 ітерацій. Даний приклад є дуже корисним для аналізу швидкодії алгоритмів, різноманітних технологій тощо.

 

# include <iostream.h>

# include <stdlib.h>

# include <stdio.h>

# include <time.h> //time

# include <sys\timeb.h> // timeb

 

Void main()

{

struct timeb timebuffer;

 

ftime( &timebuffer );

double nach = timebuffer.time+timebuffer.millitm/1000.0;

 

for(long i=1;i<100000000;i++);

 

ftime( &timebuffer );

double conec = timebuffer.time+timebuffer.millitm/1000.0;

 

printf("Kol-vo1 %f sec\n",conec - nach);

 

}

 

Функція ftime() у даному прикладі заповнює структуру timebuffer типу timeb. Потім у змінну nach записуємо кількість секунд з 1970 року з врахуванням мілісекунд, та зчитуємо відповідну кількість секунд після циклу в 100000000 ітерацій в змінну conec. Різниця цих змінних і дасть нам кількість секунд на експериментальну операцію з урахуванням мілісекунд.

Якщо необхідно провести різноманітні операції з датами: віднімання дат, додавання певної кількості днів і т.і., треба перевести дати в секунди відносно 1970 року. Для цього призначена функція mktime.

Її синтаксис наступний.

 

time_t mktime(struct tm *t);

 

Для зворотного переведення секунд до структури tm використовується функція localtime() з наступним синтаксисом:

 

struct tm *localtime(const time_t *timer);

 

ТЕМА 7: МАСИВИ

ПЛАН

1. Одномірні масиви, їхня ініціалізація.

2. Сортування масивів.

3. Розміщення одномірного масиву в пам’яті.

4. Багатомірні масиви і їхнє розміщення в пам’яті.







Последнее изменение этой страницы: 2017-02-10; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.233.229.90 (0.008 с.)