Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "avformat.h"
00022 #include "internal.h"
00023
00024 #define ISLEAP(y) (((y) % 4 == 0) && (((y) % 100) != 0 || ((y) % 400) == 0))
00025 #define LEAPS_COUNT(y) ((y)/4 - (y)/100 + (y)/400)
00026
00027
00028
00029 struct tm *brktimegm(time_t secs, struct tm *tm)
00030 {
00031 int days, y, ny, m;
00032 int md[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
00033
00034 days = secs / 86400;
00035 secs %= 86400;
00036 tm->tm_hour = secs / 3600;
00037 tm->tm_min = (secs % 3600) / 60;
00038 tm->tm_sec = secs % 60;
00039
00040
00041 y = 1970;
00042 while (days > 365) {
00043 ny = (y + days/366);
00044 days -= (ny - y) * 365 + LEAPS_COUNT(ny - 1) - LEAPS_COUNT(y - 1);
00045 y = ny;
00046 }
00047 if (days==365 && !ISLEAP(y)) { days=0; y++; }
00048 md[1] = ISLEAP(y)?29:28;
00049 for (m=0; days >= md[m]; m++)
00050 days -= md[m];
00051
00052 tm->tm_year = y;
00053 tm->tm_mon = m+1;
00054 tm->tm_mday = days+1;
00055
00056 return tm;
00057 }