⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mktime.c

📁 标准c库代码,可以应用于各个系统提供了大量的基本函数
💻 C
字号:
/* * mktime.c * Original Author:	G. Haley * * Converts the broken-down time, expressed as local time, in the structure * pointed to by tim_p into a calendar time value. The original values of the * tm_wday and tm_yday fields of the structure are ignored, and the original * values of the other fields have no restrictions. On successful completion * the fields of the structure are set to represent the specified calendar * time. Returns the specified calendar time. If the calendar time can not be * represented, returns the value (time_t) -1. *//*FUNCTION<<mktime>>---convert time to arithmetic representationINDEX	mktimeANSI_SYNOPSIS	#include <time.h>	time_t mktime(struct tm *<[timp]>);TRAD_SYNOPSIS	#include <time.h>	time_t mktime(<[timp]>)	struct tm *<[timp]>;DESCRIPTION<<mktime>> assumes the time at <[timp]> is a local time, and convertsits representation from the traditional representation defined by<<struct tm>> into a representation suitable for arithmetic.<<localtime>> is the inverse of <<mktime>>.RETURNSIf the contents of the structure at <[timp]> do not form a validcalendar time representation, the result is <<-1>>.  Otherwise, theresult is the time, converted to a <<time_t>> value.PORTABILITYANSI C requires <<mktime>>.<<mktime>> requires no supporting OS subroutines.*/#include <stdlib.h>#include <time.h>#define _SEC_IN_MINUTE 60#define _SEC_IN_HOUR 3600#define _SEC_IN_DAY 86400static _CONST int DAYS_IN_MONTH[12] ={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};#define _DAYS_IN_MONTH(x) ((x == 1) ? days_in_feb : DAYS_IN_MONTH[x])static _CONST int _DAYS_BEFORE_MONTH[12] ={0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};#define _DAYS_IN_YEAR(year) (((year) % 4) ? 365 : 366)static void validate_structure (tim_p)     struct tm *tim_p;{  div_t res;  int days_in_feb = 28;  /* calculate time & date to account for out of range values */  if (tim_p->tm_sec < 0 || tim_p->tm_sec > 59)    {      res = div (tim_p->tm_sec, 60);      tim_p->tm_min += res.quot;      if ((tim_p->tm_sec = res.rem) < 0)	tim_p->tm_sec += 60;    }  if (tim_p->tm_min < 0 || tim_p->tm_min > 59)    {      res = div (tim_p->tm_min, 60);      tim_p->tm_hour += res.quot;      if ((tim_p->tm_min = res.rem) < 0)	tim_p->tm_min += 60;    }  if (tim_p->tm_hour < 0 || tim_p->tm_hour > 23)    {      res = div (tim_p->tm_hour, 24);      tim_p->tm_mday += res.quot;      if ((tim_p->tm_hour = res.rem) < 0)	tim_p->tm_hour += 24;    }  if (tim_p->tm_mon > 11)    {      res = div (tim_p->tm_mon, 12);      tim_p->tm_year += res.quot;      if ((tim_p->tm_mon = res.rem) < 0)	tim_p->tm_mon += 12;    }  if (_DAYS_IN_YEAR (tim_p->tm_year) == 366)    days_in_feb = 29;  if (tim_p->tm_mday < 0)    {      while (tim_p->tm_mday < 0)	{	  tim_p->tm_mday += _DAYS_IN_MONTH (tim_p->tm_mon);	  if (--tim_p->tm_mon == -1)	    {	      tim_p->tm_year--;	      tim_p->tm_mon = 12;	      days_in_feb =		((_DAYS_IN_YEAR (tim_p->tm_year) == 366) ?		 29 : 28);	    }	}    }  else    {      while (tim_p->tm_mday > _DAYS_IN_MONTH (tim_p->tm_mon))	{	  tim_p->tm_mday -= _DAYS_IN_MONTH (tim_p->tm_mon);	  if (++tim_p->tm_mon == 12)	    {	      tim_p->tm_year++;	      tim_p->tm_mon = 0;	      days_in_feb =		((_DAYS_IN_YEAR (tim_p->tm_year) == 366) ?		 29 : 28);	    }	}    }}time_t mktime (tim_p)     struct tm *tim_p;{  time_t tim = 0;  long days = 0;  int year;  /* validate structure */  validate_structure (tim_p);  /* compute hours, minutes, seconds */  tim += tim_p->tm_sec + (tim_p->tm_min * _SEC_IN_MINUTE) +    (tim_p->tm_hour * _SEC_IN_HOUR);  /* compute days in year */  days += tim_p->tm_mday - 1;  days += _DAYS_BEFORE_MONTH[tim_p->tm_mon];  if (tim_p->tm_mon > 1 && _DAYS_IN_YEAR (tim_p->tm_year) == 366)    days++;  /* compute day of the year */  tim_p->tm_yday = days;  if (tim_p->tm_year > 10000      || tim_p->tm_year < -10000)    {      return (time_t) -1;    }  /* compute days in other years */  if (tim_p->tm_year > 70)    {      for (year = 70; year < tim_p->tm_year; year++)	days += _DAYS_IN_YEAR (year);    }  else if (tim_p->tm_year < 70)    {      for (year = 69; year > tim_p->tm_year; year--)	days -= _DAYS_IN_YEAR (year);      days -= _DAYS_IN_YEAR (year);    }  /* compute day of the week */  if ((tim_p->tm_wday = (days + 4) % 7) < 0)    tim_p->tm_wday += 7;  /* compute total seconds */  tim += (days * _SEC_IN_DAY);  return tim;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -