Mapper
adjtime.c
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <errno.h>
5 #include <math.h>
6 #include <sys/time.h>
7 
8 /* function to a date/time by a specified number of hours */
9 
10 int adjtime(int adj, int y, int m, int d, int h,
11  int *adj_y, int *adj_m, int *adj_d, int *adj_h)
12 {
13 
14 int y1,m1,d1,h1;
15 
16  while(adj < -24)
17  {
18  adjtime(-24,y,m,d,h,&y1,&m1,&d1,&h1);
19  y=y1;m=m1;d=d1;h=h1;
20  adj=adj+24;
21  }
22 
23  while (adj > 24)
24  {
25  adjtime(24,y,m,d,h,&y1,&m1,&d1,&h1);
26  y=y1;m=m1;d=d1;h=h1;
27  adj=adj-24;
28  }
29 
30  h=h+adj;
31 
32  if(h > 23)
33  {
34  h=h-24;
35  d++;
36  if((m == 1 || m == 3 || m == 5 || m == 7 ||
37  m == 8 || m == 10 || m == 12 ) && d > 31)
38  {
39  d=1;
40  m++;
41  if(m > 12)
42  {
43  m=1;
44  y++;
45  }
46  }
47  if((m == 4 || m == 6 || m == 9 || m == 11)
48  && d > 30)
49  {
50  d=1;
51  m++;
52  }
53 
54  if(m == 2 && (((y%4) && d > 28) || (!(y%4) && d > 29)))
55  {
56  d=1;
57  m++;
58  }
59  }
60  if(h < 0)
61  {
62  h=h+24;
63  d--;
64  if(d < 1)
65  {
66  m--;
67  if(m == 0)
68  {
69  m=12;
70  y--;
71  }
72  if(m == 1 || m == 3 || m == 5 || m == 7 ||
73  m == 8 || m == 10 || m == 12 ) d=31;
74  if(m == 4 || m == 6 || m == 9 || m == 11) d=30;
75  if(m == 2 && y%4) d=28;
76  if(m == 2 && !(y%4)) d=29;
77  }
78  }
79 
80  *adj_h=h;
81  *adj_d=d;
82  *adj_m=m;
83  *adj_y=y;
84  return(0);
85 }
86 
87 
int adjtime(int adj, int y, int m, int d, int h, int *adj_y, int *adj_m, int *adj_d, int *adj_h)
Definition: adjtime.c:10