Time_Calculator

系统 time函数实现

#define _CRT_SECURE_NO_WARNINGS		//使用了VS2017认为unsafe的函数
#include <iostream>
#include <ctime>
#include <conio.h>
#include <cstring> 
using namespace std;

struct tj_time {
	int tj_year;	//表示年份
	int tj_month;	//表示月(1-12)
	int tj_day;	//表示日(1-28/29/30/31)
	int tj_hour;	//表示小时(0-23)
	int tj_minute;	//表示分(0-59)
	int tj_second;	//表示秒(0-59)
};

void wait_for_enter(const char *prompt = "")        //功 能:给出提示并等待回车键
{
	if (strlen(prompt) == 0)
		cout << endl << "按回车键继续";
	else
		cout << endl << prompt << ",按回车键继续";

	while (_getch() != '\r')
		;
	cout << endl << endl;
}

void system_time_output(const time_t input_time)  //功 能:调用系统的转换函数将整型秒值转换为与此相似的结构体并输出
{                                                 //time_t的本质是64位无符号整数
	struct tm *tt;	                          //struct tm 为系统定义的结构体

	tt = localtime(&input_time);	          //localtime为系统函数

                                                  // tm_*** 为struct tm中的成员,和struct tj_time的内容不完全符合,具体请自行查找相关资料
	cout << tt->tm_year + 1900 << '-' << tt->tm_mon + 1 << '-' << tt->tm_mday << ' ' << tt->tm_hour << ':' << tt->tm_min << ':' << tt->tm_sec << endl;

	return;
}

void tj_time_output(struct tj_time *tp)           // 实现自定义结构的输出,输出形式与system_time_output相同
{
	cout << tp->tj_year << '-' << tp->tj_month << '-' << tp->tj_day << ' ' << tp->tj_hour << ':' << tp->tj_minute << ':' << tp->tj_second << endl;
}

struct tj_time *tj_time_convert(int input_time)   //功 能:自定义转换函数
{
	static struct tj_time result;	          //定义静态局部变量
	int mon[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	result.tj_year = 1970, result.tj_month = result.tj_day = 1, result.tj_hour = result.tj_minute = result.tj_second = 0;

	int day, i;
	day = input_time / (24 * 60 * 60);
	input_time %= (24 * 60 * 60);

	result.tj_hour = input_time / (60 * 60);
	input_time %= (60 * 60);
	result.tj_hour += 8;	                  //东8区
	if (result.tj_hour >= 24)
	{
		day++;
		result.tj_hour %= 24;
	}

	result.tj_minute = input_time / 60;
	input_time %= 60;

	result.tj_second = input_time;

	for (i = 1; i <= day; i++)
	{
		if ((result.tj_year % 4 == 0 && result.tj_year % 100 != 0) || (result.tj_year % 400 == 0))
			mon[2] = 29;
		else
			mon[2] = 28;
		result.tj_day++;
		if (result.tj_day == mon[result.tj_month] + 1)
		{
			result.tj_month++;
			result.tj_day = 1;
		}
		if (result.tj_month == 13)
		{
			result.tj_year++;
			result.tj_month = 1;
			result.tj_day = 1;
		}
	}

	return &result;	//返回静态局部变量地址
}

int main()
{
	int test_time[] = { 1, 123456789, 349823021, 987654321, 1202990407, 1216468807, 1250312143, 1272636353, 1326193524, 1336549496, 1392837128, 1625675376, 2052743737 };
	int i;
	struct tj_time *tp;

	for (i = 0; i < sizeof(test_time) / sizeof(int); i++) {
		cout << "秒数            :" << test_time[i] << endl;
		cout << "系统转换的结果  :";
		system_time_output(test_time[i]);

		cout << "自定义转换的结果:";
		tp = tj_time_convert(test_time[i]);
		tj_time_output(tp);

		wait_for_enter();
	}

	if (1) {
		struct tj_time *tp;
		int t = (int)time(0);		//系统函数,取当前系统时间(从1970-01-01 00:00:00开始的秒数)

		cout << "当前系统时间    :" << t << endl;
		cout << "系统转换的结果  :";
		system_time_output(t);

		cout << "自定义转换的结果:";
		tp = tj_time_convert(t);
		tj_time_output(tp);

		wait_for_enter();
	}

	return 0;
}

 

Tags:

Add a Comment

Your email address will not be published. Required fields are marked *