Стандартная библиотека C ++ не предоставляет правильный тип даты. C ++ наследует структуры и функции для обработки дат и времени из C. Чтобы получить доступ к функциям и структурам, связанным с датой и временем, вам нужно будет включить заголовочный файл <ctime> в вашей программе на C ++.
Существует четыре типа времени: clock_t, time_t, size_t
и tm
. Типы - clock_t, size_t
и time_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 ++, приведенную ниже.
time_t time (time_t * time); | Это возвращает текущее время календаря системы в количестве секунд, прошедших с 1 января 1970 года. Если система не имеет времени, возвращается .1. |
char * ctime (const time_t * time); | Это возвращает указатель на строку формы день месяц год: минуты: секунды год \ n \ 0 . |
struct tm * localtime (const time_t * time); | Это возвращает указатель на структуру tm, представляющую локальное время. |
clock_t clock (void); | Это возвращает значение, которое приблизительно соответствует времени, в течение которого вызываемая программа была запущена. Значение, равное .1, возвращается, если время недоступно. |
char * asctime (const struct tm * time); | Это возвращает указатель на строку, содержащую информацию, хранящуюся в структуре, на которую указывает время, преобразованное в форму: day month date hours: minutes: seconds year \ n \ 0 |
struct tm * gmtime (const time_t * time); | Это возвращает указатель на время в виде структуры tm. Время представлено в скоординированном универсальном времени (UTC), которое по сути является средним временем по Гринвичу (GMT). |
time_t mktime (struct tm * time); | Это возвращает эквивалент календарного времени времени, найденного в структуре, на которую указывает время. |
double difftime (time_t time2, time_t time1); | Эта функция вычисляет разницу в секундах между временем 1 и временем 2. |
size_t strftime (); | Эта функция может использоваться для форматирования даты и времени в определенном формате. |
Текущая дата и время
Предположим, вы хотите получить текущую системную дату и время, либо в качестве локального времени, либо в качестве скоординированного универсального времени (UTC). Ниже приведен пример для достижения того же:
#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
Формат времени с использованием struct tm
Структура tm очень важна при работе с датой и временем на C или C ++. Эта структура содержит дату и время в виде структуры C, как указано выше. Большинство функций, связанных со временем, используют структуру tm. Ниже приведен пример, который использует различные функции, связанные с датой и временем, и структуру tm -
При использовании структуры в этой главе я исхожу из предположения, что у вас есть базовое понимание структуры C и как получить доступ к членам структуры с помощью оператора arrow ->
.
#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
0 комментариев