Функция времени, делающая вас сильным человеком, контролирующим время

Наверное, я устал и не мог радоваться ни вбок, ни в вертикали, встал и нахмурился, для этой грусти не было причин. Будучи младшим программистом, который долгое время не мог контролировать системное время, после нескольких дней исследований я по прихоти обобщил его и поделился с друзьями. Друзья могут с нетерпением ждать этого, но как блогу удается управлять временем ? Бесполезно говорить больше, начните текст!

содержание

Какая сегодня дата?

time_t тип: календарное время

функция времени: получить текущее время в виде календарного времени

структура 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(&current);                     //获取当前时间
	timer = localtime(&current);        //转换成分解时间(本地时间)

	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(&current);
	timer = gmtime(&current);

	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(&current)));

	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(&current));

	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博客

如果觉得本篇博客对正在学习编程的你有帮助的话,请给施律.多一点的支持与关注!未来的一段时间里施律.将和小伙伴们一起在编程的道路是越来越远,希望下次的我能为大家奉上更好的博客内容,也希望下次的博客有你

рекомендация

отblog.csdn.net/qq_64263760/article/details/124075069
рекомендация