Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функції роботи з датою та часомСодержание книги
Поиск на нашем сайте
При розробці програмного забезпечення виникає необхідність роботи з датою та часом. Під датою будемо розуміти рік, місяць, день місяця. Під часом – години, хвилини, секунди та мілісекунди. У програмуванні виникають такі основні задачі роботи з датою, як отримання поточної дати та часу, арифметичні операції з датою та часом, використовуючи структури роботи з датою. Для роботи з датою та часом до головної програми необхідно включити хайдер <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; просмотров: 246; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.116.142 (0.006 с.) |