aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-util/timeutil.h
blob: 77a8f180e1d179374cfd9627d9759ab4bebff243 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/* Miscellaneous time-related utilities
 *
 * Copyright (C) 1998 The Free Software Foundation
 * Copyright (C) 2000 Ximian, Inc.
 *
 * Authors: Federico Mena <federico@ximian.com>
 *          Miguel de Icaza <miguel@ximian.com>
 *          Damon Chaplin <damon@ximian.com>
 */

#ifndef TIMEUTIL_H
#define TIMEUTIL_H


#include <time.h>
#include <ical.h>
#include <glib.h>


/**************************************************************************
 * General time functions.
 **************************************************************************/

/* Returns the number of days in the month. Year is the normal year, e.g. 2001.
   Month is 0 (Jan) to 11 (Dec). */
int time_days_in_month  (int year, int month);

/* Returns the 1-based day number within the year of the specified date.
   Year is the normal year, e.g. 2001. Month is 0 to 11. */
int time_day_of_year    (int day, int month, int year);

/* Returns the day of the week for the specified date, 0 (Sun) to 6 (Sat).
   For the days that were removed on the Gregorian reformation, it returns
   Thursday. Year is the normal year, e.g. 2001. Month is 0 to 11. */
int time_day_of_week    (int day, int month, int year);

/* Returns whether the specified year is a leap year. Year is the normal year,
   e.g. 2001. */
gboolean time_is_leap_year  (int year);

/* Returns the number of leap years since year 1 up to (but not including) the
   specified year. Year is the normal year, e.g. 2001. */
int time_leap_years_up_to   (int year);

/* Convert to or from an ISO 8601 representation of a time, in UTC,
   e.g. "20010708T183000Z". */
char   *isodate_from_time_t     (time_t t);
time_t  time_from_isodate   (const char *str);


/**************************************************************************
 * time_t manipulation functions.
 *
 * NOTE: these use the Unix timezone functions like mktime() and localtime()
 * and so should not be used in Evolution. New Evolution code should use
 * icaltimetype values rather than time_t values wherever possible.
 **************************************************************************/

/* Add or subtract a number of days, weeks or months. */
time_t  time_add_day        (time_t time, int days);
time_t  time_add_week       (time_t time, int weeks);

/* Returns the beginning or end of the day. */
time_t  time_day_begin      (time_t t);
time_t  time_day_end        (time_t t);


/**************************************************************************
 * time_t manipulation functions, using timezones in libical.
 *
 * NOTE: these are only here to make the transition to the timezone
 * functions easier. New code should use icaltimetype values rather than
 * time_t values wherever possible.
 **************************************************************************/

/* Adds or subtracts a number of days to/from the given time_t value, using
   the given timezone. */
time_t  time_add_day_with_zone (time_t time, int days, icaltimezone *zone);

/* Adds or subtracts a number of weeks to/from the given time_t value, using
   the given timezone. */
time_t  time_add_week_with_zone (time_t time, int weeks, icaltimezone *zone);

/* Adds or subtracts a number of months to/from the given time_t value, using
   the given timezone. */
time_t  time_add_month_with_zone (time_t time, int months, icaltimezone *zone);

/* Returns the start of the year containing the given time_t, using the given
   timezone. */
time_t  time_year_begin_with_zone (time_t time, icaltimezone *zone);

/* Returns the start of the month containing the given time_t, using the given
   timezone. */
time_t  time_month_begin_with_zone (time_t time, icaltimezone *zone);

/* Returns the start of the week containing the given time_t, using the given
   timezone. week_start_day should use the same values as mktime(),
   i.e. 0 (Sun) to 6 (Sat). */
time_t  time_week_begin_with_zone (time_t time, int week_start_day,
                   icaltimezone *zone);

/* Returns the start of the day containing the given time_t, using the given
   timezone. */
time_t  time_day_begin_with_zone (time_t time, icaltimezone *zone);

/* Returns the end of the day containing the given time_t, using the given
   timezone. (The end of the day is the start of the next day.) */
time_t  time_day_end_with_zone (time_t time, icaltimezone *zone);

void time_to_gdate_with_zone (GDate *date, time_t time, icaltimezone *zone);

/**************************************************************************
 * struct tm manipulation 
 **************************************************************************/

struct tm icaltimetype_to_tm (struct icaltimetype *itt);
struct tm icaltimetype_to_tm_with_zone (struct icaltimetype *itt,
                    icaltimezone *from_zone,
                    icaltimezone *to_zone);
struct icaltimetype tm_to_icaltimetype (struct tm *tm, gboolean is_date);

#endif