Наверное, я устал и не мог радоваться ни вбок, ни в вертикали, встал и нахмурился, для этой грусти не было причин. Будучи младшим программистом, который долгое время не мог контролировать системное время, после нескольких дней исследований я по прихоти обобщил его и поделился с друзьями. Друзья могут с нетерпением ждать этого, но как блогу удается управлять временем ? Бесполезно говорить больше, начните текст!
содержание
функция времени: получить текущее время в виде календарного времени
структура tm: время распада (время разрыва)
Функция localtime: преобразует календарное время в разложенное время, представляющее местное время.
Функция gmtime: преобразование календарного времени во время декомпозиции UTC
функция asctime: преобразовать разложенное время в строку
Функция ctime: преобразовать календарное время в строку
Функция difftime: найти разницу во времени
Функция mktime: изменение полярности
Какая сегодня дата?
Давайте начнем с первого кода этого блога и узнаем, как получить текущую дату и время:
//time01
#include <stdio.h>
#include <time.h>
void put_date(const struct tm* timer)
{
char* wday_name[] = { "日","一","二","三","四","五","六" };
printf("%4d年%02d月%02d日(%s)%02d时%02d分%02d秒", timer->tm_year + 1900, //年
timer->tm_mon + 1, //月
timer->tm_mday, //日
wday_name[timer->tm_wday], //星期
timer->tm_hour, //时
timer->tm_min, //分
timer->tm_sec); //秒
}
int main()
{
time_t current; //日历时间
struct tm* timer; //分解时间(结构体)
time(¤t); //获取当前时间
timer = localtime(¤t); //转换成分解时间(本地时间)
printf("当前日期和时间是");
put_date(timer);
printf("。\n");
return 0;
}
time_t тип: календарное время
Тип time_t, также известный как календарное время , на самом деле является арифметическим типом, который может выполнять операции сложения, вычитания, умножения и деления точно так же, как типы int и double. Какой тип эквивалентен, зависит от среды программирования (не только типа календарного времени, но и его конкретного значения). Для его использования необходимо добавить определение файла заголовка <time.h>. В большинстве сред компиляции тип time_t эквивалентен типу int или типу long, а среднее время по Гринвичу, то есть количество секунд, прошедших после 0:0:0:0 1 января 1970 года, используется в качестве конкретное значение календарного времени.
функция времени: получить текущее время в виде календарного времени
И посмотрите на таблицу ниже:
время | |
головной файл | #include <время.ч> |
Формат | time_t время (time_t * таймер); |
Функции | Определяет текущее календарное время. Представление этого значения не определено |
возвращаемое значение | Возвращает рассчитанное календарное время с наилучшей аппроксимацией в среде, в которой оно скомпилировано. Если календарное время неверно, возвращаемое значение (time_t) равно 1. Если таймер не является нулевым указателем, возвращаемое значение присваивается объекту, на который указывает таймер. |
На основе нахождения календарного времени эта функция сохраняет календарное время в объекте, на который указывает параметр timer, и одновременно возвращает календарное время. Таким образом, мы можем выбирать различные методы вызова в соответствии с различными вариантами использования и личными предпочтениями.
Мы передаем указатель на переменную current в качестве аргумента функции времени , используя time(¤t);.
структура tm: время распада (время разрыва)
Попробуйте использовать тип time_t для представления времени, мы знаем, что он представляет что-то, что нам чрезвычайно трудно понять:
Поэтому мы можем использовать другой способ представления, который называется типом структуры tm времени разрыва .
Давайте посмотрим на структуру tm :
struct tm{
int tm_sec; //秒(0-61)
int tm_min; //分(0-59)
int tm_hour; //时(0-23)
int tm_mday; //日(0-31)
int tm_mon; //从一月开始的月份(0-11)
int tm_year; //从1900开始的年份
int tm_wday; //星期:星期日-星期六(0-6)
int tm_yday; //从1月1日开始的天数(0-365)
};
Друзья могут понять значение, представленное каждым участником, через комментарии в коде. И когда мы переходим ко второму члену, значение tm_min устанавливается в 0-61 , потому что учитывается «високосная секунда» .
Функция localtime: преобразует календарное время в разложенное время, представляющее местное время.
Функция localtime (через структуру tm) используется для преобразования значения календарного времени в составное время.
местное время | |
головной файл | #include <время.ч> |
Формат | структура tm*localtime(const time_t *timer); |
Функции | Преобразует календарное время, на которое указывает таймер, в разложенное время, выраженное в местном времени. |
возвращаемое значение | Возвращает указатель на преобразованный объект |
Поскольку литерал locattime обозначается цифрой четыре, после преобразования вы получаете местное время. Давайте посмотрим на его представление:
Наконец, давайте проанализируем программу time01.
(1) В основной функции мы используем функцию времени, чтобы получить текущее время в виде календарного времени time_t и преобразовать его в разложенное время, то есть структуру tm.
(2) Как использовать put_date для принятия преобразованной структуры и отображения времени разложения в григорианской эре;
(3) Наконец, добавьте 1900 к tm_year и добавьте к tm_mon 1. Поскольку tm_wday, представляющий неделю, соответствует от 0 до 6 с воскресенья по субботу, массив wday_name можно использовать для преобразования его в китайскую строку «日», « Один",..."Шесть" и отображается.
Функция gmtime: преобразование календарного времени во время декомпозиции UTC
Говорить только о местном времени слишком скупо, поэтому я приведу координированное время (т.е. UTC) своим друзьям.
Функция gmtime — это функция, используемая для выполнения UTC, см. таблицу ниже;
гмвремя | |
головной файл | #include <время.ч> |
Формат | struct tm *gmtime(const time_t *timer); |
Функции | Преобразует календарное время, на которое указывает таймер, в разложенное время, выраженное в координированном времени. |
возвращаемое значение | Возвращает указатель на преобразованный объект |
Давайте посмотрим, как использовать функцию gmtime, код на самом деле такой же, как у time01:
//time02
#include <stdio.h>
#include <time.h>
void put_date(const struct tm* timer)
{
char* wday_name[] = { "日","一","二","三","四","五","六" };
printf("%4d年%02d月%02d日(%s)%02d时%02d分%02d秒", timer->tm_year + 1900,
timer->tm_mon + 1,
timer->tm_mday,
wday_name[timer->tm_wday],
timer->tm_hour,
timer->tm_min,
timer->tm_sec);
}
int main()
{
time_t current;
struct tm* timer;
time(¤t);
timer = gmtime(¤t);
printf("当前日期和时间用UTC表示是");
put_date(timer);
printf("。\n");
return 0;
}
По сути, это замена timer = localtime(¤t); на timer = gmtime(¤t); .
функция asctime: преобразовать разложенное время в строку
Позвольте мне поделиться функцией с моими друзьями, она может преобразовать время разложения в строку, а может просто представить текущую дату и время, почему бы не сделать это? И посмотрите на следующий код:
//time03
#include <stdio.h>
#include <time.h>
int main()
{
time_t current = time(NULL);
printf("当前日期和时间:%s", asctime(localtime(¤t)));
return 0;
}
Функция asctime — это функция, которая преобразует разложенное время в строковую форму. Строки, которые он генерирует и возвращает, расположены в порядке неделя/месяц/день/час/минута/секунда/год слева направо, разделенные пробелами и двоеточиями ":" .
Мы видим, что в начале их английских слов в неделе и месяце есть 3 буквы соответственно (первая буква — заглавная, а вторая и третья — строчные). Давайте еще раз взглянем на его таблицу:
asctime | |
головной файл | #include <время.ч> |
Формат | char * asctime (const struct tm * timeptr); |
Функции | Преобразуйте время разложения структуры, на которую указывает timeptr, в строку следующего вида Вс 10 апр 13:13:09:00 2022 |
возвращаемое значение | Возвращает указатель на преобразованный объект |
Функция ctime: преобразовать календарное время в строку
При использовании функции asctime для преобразования календарного времени типа time_t в время декомпозиции структуры tm нам необходимо вызвать функцию localtime. Таким образом, для преобразования календарного времени в строку требуется два шага, что слишком громоздко. Функция ctime отличается, она занимает всего один шаг!
//time04
#include <stdio.h>
#include <time.h>
int main()
{
time_t current = time(NULL);
printf("当前日期和时间:%s", ctime(¤t));
return 0;
}
Таблица ctime выглядит следующим образом:
cвремя | |
головной файл | #include <время.ч> |
Формат | char *ctime(const time_t *timer); |
Функции | Преобразование календарного времени, на которое указывает таймер, в местное время в той же строковой форме, что и функция asctime, эквивалентная asctime(localtime(timer)) |
возвращаемое значение | Возвращает указатель, возвращенный функцией asctime, со временем декомпозиции в качестве фактического параметра. |
Функция difftime: найти разницу во времени
Далее я покажу вам, как использовать календарное время, полученное функцией времени, для расчета времени обработки. Сначала код:
//time05
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, c, d;
int x;
time_t start, end;
srand(time(NULL));
a = rand() % 100;
b = rand() % 100;
c = rand() % 100;
d = rand() % 100;
printf("%d+%d+%d+%d等于多少:", a, b, c, d);
start = time(NULL);
while (1)
{
scanf("%d", &x);
if (x == a + b + c + d)
break;
printf("回答错误!!\n请重新输入:");
}
end = time(NULL);
printf("用时%.0f秒。\n", difftime(end, start));
return 0;
}
p rintf("Время %.0f секунд.\n", difftime(end, start)); Используется для нахождения разницы между двумя календарными значениями времени путем вызова функции difftime. Его использование крайне простое, достаточно указать два значения типа time_t в качестве параметров (конец-начало), а разницу во времени вернуть в виде значения типа double в секундах.
Давайте еще раз взглянем на таблицу difftime:
разное время | |
головной файл | #include <время.ч> |
Формат | двойное время разности (time_t time1, time_t time0); |
Функции | Рассчитать разницу между двумя календарными временами time1 - time0 |
возвращаемое значение | Представляет полученную разницу во времени в секундах, возвращаемую как двойной |
спросить неделю
Функция mktime: изменение полярности
Я описал, как преобразовать календарное время в разложенное время, теперь я расскажу о том, как преобразовать разложенное время местного времени в календарное время, то есть использовать функцию mktime, которая противоположна преобразованию, выполняемому функцией localtime. .
而且,这函数还带来了意外之喜。它可以计算并设定结构体的星期和一年中经过的天数的值。利用该功能的话,咱只需设定分解时间的年/月/日并调用mktime 函数,就能求出对应的星期。
我们来看看它的流程图:
这可真是两极反转啊!
最后,用一段华丽的代码了却此博客:
//time06
#include <time.h>
#include <stdio.h>
int dayofweek(int year, int month, int day)
{
struct tm t;
t.tm_year = year - 1900;
t.tm_mon = month - 1;
t.tm_mday = day;
t.tm_hour = 0;
t.tm_min = 0;
t.tm_sec = 0;
t.tm_isdst = -1;
if (mktime(&t) == (time_t)-1)
return -1;
return t.tm_wday;
}
int main()
{
int y, m, d, w;
char* ws[] = { "日","一","二","三","四","五","六" };
printf("求星期。\n");
printf("年:"); scanf("%d", &y);
printf("月:"); scanf("%d", &m);
printf("日:"); scanf("%d", &d);
w = dayofweek(y, m, d);
if (w != -1)
printf("这一天是星期%s。\n", ws[w]);
else
printf("无法求出星期。\n");
return 0;
}
time06 中定义的dayofweek 函数会根据接受的年/月/日这3个值来生成分解时间,然后再调用mktime 函数,之后函数会通过”附赠“的功能直接返回成员函数tm_wday 中设定的值,值为0是星期日……
此外,mktime函数返回错误时,说明程序有可能求出了错误的星期数值,因此函数dayofweek 会返回 -1。
完结
很感激阅读到这里的你,相信阅读完的你已经成为了掌控时间的强者了吧!精彩并不止于这些,学有余力的小伙伴可以看看下面这些博客,都是有着极多的技巧与干货❤!
C语言小游戏(一)----猜数游戏_施律.的博客-CSDN博客_c语言猜数游戏次数限制
《斗破CPP》 第壹章 ---- 初窥CPP_施律.的博客-CSDN博客
《斗破CPP》 第贰章(上) ---- 初识分支句_施律.的博客-CSDN博客
如果觉得本篇博客对正在学习编程的你有帮助的话,请给施律.多一点的支持与关注!未来的一段时间里施律.将和小伙伴们一起在编程的道路是越来越远,希望下次的我能为大家奉上更好的博客内容,也希望下次的博客有你!