📄 timeadd.c
字号:
/*===========================================================================*//* SEED reader | timeadd | utility *//*===========================================================================*//* Name: timeadd Purpose:add some number of seconds to a time of the form yyyyddd hh:mm:ss.ffff Usage: struct time timeadd (); struct time time; struct time newtime; int increment; newtime = timeadd (time, increment); Input: time = the original time in struct time form (see Notes) increment = number of seconds to add to time Output: newtime = the resultant time in struct time form (see Notes) Externals: none Warnings: none Errors: none Called by: anything Calls to: none Algorithm:convert the input time, exclusive of year and day, to seconds; add increment number of seconds to time; convert result to hours, minutes, seconds, and fractional seconds, allowing for change of day and year. Notes: The time structure looks like: struct time { int year; int day; int hour; int minute; int second; int fracsec; }; Problems:Gives incorrect result if there was a leap second at the year boundary Gives incorrect result if increment > 1 year References: none Language: C, hopefully ANSI standard Author: Dennis O'Neill Revisions: 07/15/88 Dennis O'Neill Initial preliminary release 0.9 11/21/88 Dennis O'Neill Production release 1.0 CL - changed increment to unsigned*/#include "rdseed.h"/*#define isaleap(year) (((year%100 != 0) && (year%4 == 0)) || (year%400 == 0)) */struct time timeadd (time, increment)struct time time;unsigned int increment;{ struct time newtime; /* result */ struct time timeinc; /* time increment */ int addterm; /* initialize year and day */ newtime.year = time.year; newtime.day = time.day; /* convert increment to hh:mm:ss.ffff */ timeinc.fracsec = increment % 10000; increment = increment / 10000; timeinc.hour = increment / 3600; timeinc.minute = (increment - (timeinc.hour * 3600)) / 60; timeinc.second = increment - (timeinc.hour * 3600) - (timeinc.minute * 60); /* add the increment to the original time */ newtime.hour = time.hour + timeinc.hour; newtime.minute = time.minute + timeinc.minute; newtime.second = time.second + timeinc.second; newtime.fracsec = time.fracsec + timeinc.fracsec; /* adjust fractional seconds, increment seconds if necessary */ if (newtime.fracsec >= 10000) { addterm = newtime.fracsec / 10000; newtime.second = newtime.second + addterm; newtime.fracsec -= 10000 * addterm; } /* adjust seconds, increment minutes if necessary */ if (newtime.second >= 60) { addterm = newtime.second / 60; newtime.minute = newtime.minute + addterm; newtime.second -= 60 * addterm; } /* adjust minutes, increment hours if necessary */ if (newtime.minute >= 60) { addterm = newtime.minute / 60; newtime.hour = newtime.hour + addterm; newtime.minute -= 60 * addterm; } /* adjust hours, increment days if necessary */ if (newtime.hour >= 24) { addterm = newtime.hour / 24; newtime.day = newtime.day + addterm; newtime.hour -= 24 * addterm; } /* increment year if necessary, allowing for leap year */ if ((!isaleap (time.year)) && (newtime.day > 365)) { newtime.year += 1; newtime.day -= 365; } else if ((isaleap (time.year)) && (newtime.day > 366)) { newtime.year += 1; newtime.day -=366; } return (newtime);}/* -------------------------------------------------------------------------------- */struct time timesub(time, decrement)struct time time;unsigned int decrement;{ struct time newtime; /* result */ struct time timedec; /* time increment */ /* initialize year and day */ newtime.year = time.year; newtime.day = time.day; /* convert decrement to hh:mm:ss.ffff */ timedec.fracsec = decrement % 10000; decrement = decrement / 10000; timedec.hour = decrement / 3600; timedec.minute = (decrement - (timedec.hour * 3600)) / 60; timedec.second = decrement - (timedec.hour * 3600) - (timedec.minute * 60); /* sub the decrement to the original time */ newtime.hour = time.hour - timedec.hour; newtime.minute = time.minute - timedec.minute; newtime.second = time.second - timedec.second; newtime.fracsec = time.fracsec - timedec.fracsec; /* adjust fractional seconds, decrement seconds if necessary */ if (newtime.fracsec < 0) { newtime.second--; newtime.fracsec += 10000; } /* adjust seconds, decrements minutes if necessary */ if (newtime.second < 0) { newtime.minute--; newtime.second += 60; } /* adjust minutes, decrement hours if necessary */ if (newtime.minute < 0) { newtime.hour--; newtime.minute += 60; } /* adjust hours, decrement days if necessary */ if (newtime.hour < 0) { newtime.day--; newtime.hour += 24; } /* decrement year if necessary, allowing for leap year */ if (newtime.day <= 0) { newtime.year--; if (isaleap(newtime.year)) newtime.day = 366; else newtime.day = 365; } return (newtime);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -