<!-- ##### SECTION Title ##### -->
Date and Time Functions

<!-- ##### SECTION Short_Description ##### -->
calendrical calculations and miscellaneous time stuff

<!-- ##### SECTION Long_Description ##### -->
<para>
The #GDate data structure represents a day between January 1, Year 1,
and sometime a few thousand years in the future (right now it will go
to the year 65535 or so, but g_date_set_parse() only parses up to the
year 8000 or so - just count on "a few thousand"). #GDate is meant to
represent everyday dates, not astronomical dates or historical dates
or ISO timestamps or the like. It extrapolates the current Gregorian
calendar forward and backward in time; there is no attempt to change
the calendar to match time periods or locations. #GDate does not store
time information; it represents a <emphasis>day</emphasis>.
</para>

<para>
The #GDate implementation has several nice features; it is only a
64-bit struct, so storing large numbers of dates is very efficient. It
can keep both a Julian and day-month-year representation of the date,
since some calculations are much easier with one representation or the
other. A Julian representation is simply a count of days since some
fixed day in the past; for #GDate the fixed day is January 1, 1 AD.
("Julian" dates in the #GDate API aren't really Julian dates in the
technical sense; technically, Julian dates count from the start of the
Julian period, Jan 1, 4713 BC).
</para>

<para>
#GDate is simple to use. First you need a "blank" date; you can get a
dynamically allocated date from g_date_new(), or you can declare an
automatic variable or array and initialize it to a sane state by
calling g_date_clear(). A cleared date is sane; it's safe to call
g_date_set_dmy() and the other mutator functions to initialize the
value of a cleared date. However, a cleared date is initially
<emphasis>invalid</emphasis>, meaning that it doesn't represent a day
that exists. It is undefined to call any of the date calculation
routines on an invalid date. If you obtain a date from a user or other
unpredictable source, you should check its validity with the
g_date_valid() predicate. g_date_valid() is also used to check for
errors with g_date_set_parse() and other functions that can
fail. Dates can be invalidated by calling g_date_clear() again.
</para>

<para>
<emphasis>It is very important to use the API to access the #GDate
struct.</emphasis> Often only the day-month-year or only the Julian
representation is valid. Sometimes neither is valid. Use the API.
</para>

<para>
GLib doesn't contain any time-manipulation functions; however, there
is a #GTime typedef and a #GTimeVal struct which represents a more 
precise time (with microseconds). You can request the current time as 
a #GTimeVal with g_get_current_time().
</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### SECTION Image ##### -->


<!-- ##### MACRO G_USEC_PER_SEC ##### -->
<para>
Number of microseconds in one second (1 million). This macro is provided for
code readability.
</para>



<!-- ##### STRUCT GTimeVal ##### -->
<para>
Represents a precise time, with seconds and microseconds. 
Similar to the <structname>struct timeval</structname> returned by 
the <function>gettimeofday()</function> UNIX call.
</para>

@tv_sec: seconds
@tv_usec: microseconds

<!-- ##### FUNCTION g_get_current_time ##### -->
<para>
</para>

@result: 


<!-- ##### FUNCTION g_usleep ##### -->
<para>
Pauses the current thread for the given number of microseconds. There
are 1 million microseconds per second (represented by the
#G_USEC_PER_SEC macro). g_usleep() may have limited precision,
depending on hardware and operating system; don't rely on the exact
length of the sleep.
</para>

@microseconds: number of microseconds to pause


<!-- ##### FUNCTION g_time_val_add ##### -->
<para>

</para>

@time_: 
@microseconds: 


<!-- ##### FUNCTION g_time_val_from_iso8601 ##### -->
<para>

</para>

@iso_date: 
@time_: 
@Returns: 


<!-- ##### FUNCTION g_time_val_to_iso8601 ##### -->
<para>

</para>

@time_: 
@Returns: 


<!-- ##### STRUCT GDate ##### -->
<para>
Represents a day between January 1, Year 1 and a few thousand years in
the future. None of its members should be accessed directly. If the
<structname>GDate</structname> is obtained from g_date_new(), it will
be safe to mutate but invalid and thus not safe for calendrical computations.
If it's declared on the stack, it will contain garbage so must be
initialized with g_date_clear(). g_date_clear() makes the date invalid
but sane. An invalid date doesn't represent a day, it's "empty." A
date becomes valid after you set it to a Julian day or you set a day,
month, and year.
</para>

@julian_days: the Julian representation of the date
@julian: this bit is set if @julian_days is valid
@dmy: this is set if @day, @month and @year are valid
@day: the day of the day-month-year representation of the date, as 
  a number between 1 and 31
@month: the day of the day-month-year representation of the date, as 
  a number between 1 and 12
@year: the day of the day-month-year representation of the date

<!-- ##### TYPEDEF GTime ##### -->
<para>
Simply a replacement for <type>time_t</type>. It has been deprected
since it is <emphasis>not</emphasis> equivalent to <type>time_t</type> 
on 64-bit platforms with a 64-bit <type>time_t</type>. 
Unrelated to #GTimer.
</para>


<para>
Note that <type>GTime</type> is defined to always be a 32bit integer,
unlike <type>time_t</type> which may be 64bit on some systems. 
Therefore, <type>GTime</type> will overflow in the year 2038, and
you cannot use the address of a <type>GTime</type> variable as argument 
to the UNIX time() function. Instead, do the following:
<informalexample>
<programlisting>
time_t ttime;
GTime gtime;

time (&amp;ttime);
gtime = (GTime)ttime;
</programlisting>
</informalexample>
</para>


<!-- ##### ENUM GDateDMY ##### -->
<para>
This enumeration isn't used in the API, but may be useful if you need
to mark a number as a day, month, or year.
</para>

@G_DATE_DAY: a day
@G_DATE_MONTH: a month
@G_DATE_YEAR: a year

<!-- ##### TYPEDEF GDateDay ##### -->
<para>
Integer representing a day of the month; between 1 and
31. #G_DATE_BAD_DAY represents an invalid day of the month.
</para>


<!-- ##### ENUM GDateMonth ##### -->
<para>
Enumeration representing a month; values are #G_DATE_JANUARY,
#G_DATE_FEBRUARY, etc. #G_DATE_BAD_MONTH is the invalid value.
</para>

@G_DATE_BAD_MONTH: invalid value
@G_DATE_JANUARY: January
@G_DATE_FEBRUARY: February
@G_DATE_MARCH: March
@G_DATE_APRIL: April
@G_DATE_MAY: May
@G_DATE_JUNE: June
@G_DATE_JULY: July
@G_DATE_AUGUST: August
@G_DATE_SEPTEMBER: September
@G_DATE_OCTOBER: October
@G_DATE_NOVEMBER: November
@G_DATE_DECEMBER: December

<!-- ##### TYPEDEF GDateYear ##### -->
<para>
Integer representing a year; #G_DATE_BAD_YEAR is the invalid
value. The year must be 1 or higher; negative (BC) years are not
allowed. The year is represented with four digits.
</para>


<!-- ##### ENUM GDateWeekday ##### -->
<para>
Enumeration representing a day of the week; #G_DATE_MONDAY,
#G_DATE_TUESDAY, etc. #G_DATE_BAD_WEEKDAY is an invalid weekday.
</para>

@G_DATE_BAD_WEEKDAY: invalid value
@G_DATE_MONDAY: Monday
@G_DATE_TUESDAY: Tuesday
@G_DATE_WEDNESDAY: Wednesday
@G_DATE_THURSDAY: Thursday
@G_DATE_FRIDAY: Friday
@G_DATE_SATURDAY: Saturday
@G_DATE_SUNDAY: Sunday

<!-- ##### MACRO G_DATE_BAD_DAY ##### -->
<para>
Represents an invalid #GDateDay.
</para>



<!-- ##### MACRO G_DATE_BAD_JULIAN ##### -->
<para>
Represents an invalid Julian day number.
</para>



<!-- ##### MACRO G_DATE_BAD_YEAR ##### -->
<para>
Represents an invalid year.
</para>



<!-- ##### FUNCTION g_date_new ##### -->
<para>
Allocates a #GDate and initializes it to a sane state. The new date will
be cleared (as if you'd called g_date_clear()) but invalid (it won't
represent an existing day). Free the return value with g_date_free().
</para>

@void: 
@Returns: a newly-allocated #GDate


<!-- ##### FUNCTION g_date_new_dmy ##### -->
<para>
Like g_date_new(), but also sets the value of the date. Assuming the
day-month-year triplet you pass in represents an existing day, the
returned date will be valid.
</para>

@day: day of the month
@month: month of the year
@year: year
@Returns: a newly-allocated #GDate initialized with @day, @month, and @year


<!-- ##### FUNCTION g_date_new_julian ##### -->
<para>
Like g_date_new(), but also sets the value of the date. Assuming the
Julian day number you pass in is valid (greater than 0, less than an
unreasonably large number), the returned date will be valid.
</para>

@julian_day: days since January 1, Year 1
@Returns: a newly-allocated #GDate initialized with @julian_day


<!-- ##### FUNCTION g_date_clear ##### -->
<para>
Initializes one or more #GDate structs to a sane but invalid
state. The cleared dates will not represent an existing date, but will
not contain garbage. Useful to init a date declared on the stack.
Validity can be tested with g_date_valid().
</para>

@date: pointer to one or more dates to clear
@n_dates: number of dates to clear


<!-- ##### FUNCTION g_date_free ##### -->
<para>
Frees a #GDate returned from g_date_new().
</para>

@date: a #GDate


<!-- ##### FUNCTION g_date_set_day ##### -->
<para>
Sets the day of the month for a #GDate. If the resulting day-month-year
triplet is invalid, the date will be invalid.
</para>

@date: a #GDate
@day: day to set


<!-- ##### FUNCTION g_date_set_month ##### -->
<para>
Sets the month of the year for a #GDate.  If the resulting
day-month-year triplet is invalid, the date will be invalid.
</para>

@date: a #GDate
@month: month to set


<!-- ##### FUNCTION g_date_set_year ##### -->
<para>
Sets the year for a #GDate. If the resulting day-month-year triplet is
invalid, the date will be invalid.
</para>

@date: a #GDate
@year: year to set


<!-- ##### FUNCTION g_date_set_dmy ##### -->
<para>
Sets the value of a #GDate from a day, month, and year. The day-month-year 
triplet must be valid; if you aren't sure it is, call g_date_valid_dmy() to
check before you set it.
</para>

@date: a #GDate
@day: day
@month: month
@y: year


<!-- ##### FUNCTION g_date_set_julian ##### -->
<para>
Sets the value of a #GDate from a Julian day number.
</para>

@date: a #GDate
@julian_date: Julian day number (days since January 1, Year 1)


<!-- ##### FUNCTION g_date_set_time ##### -->
<para>

</para>

@date: 
@time_: 


<!-- ##### FUNCTION g_date_set_time_t ##### -->
<para>

</para>

@date: 
@timet: 


<!-- ##### FUNCTION g_date_set_time_val ##### -->
<para>

</para>

@date: 
@timeval: 


<!-- ##### FUNCTION g_date_set_parse ##### -->
<para>
Parses a user-inputted string @str, and try to figure out what date it
represents, taking the <link linkend="setlocale">current locale</link> 
into account. If the string is successfully parsed, the date will be 
valid after the call. Otherwise, it will be invalid. You should check 
using g_date_valid() to see whether the parsing succeeded.
</para>

<para>
This function is not appropriate for file formats and the like; it
isn't very precise, and its exact behavior varies with the
locale. It's intended to be a heuristic routine that guesses what the
user means by a given string (and it does work pretty well in that
capacity).
</para>

@date: a #GDate to fill in
@str: string to parse


<!-- ##### FUNCTION g_date_add_days ##### -->
<para>
Increments a date some number of days. To move forward by weeks, add
weeks*7 days. The date must be valid.
</para>

@date: a #GDate to increment
@n_days: number of days to move the date forward


<!-- ##### FUNCTION g_date_subtract_days ##### -->
<para>
Moves a date some number of days into the past. To move by weeks, just
move by weeks*7 days. The date must be valid.
</para>

@date: a #GDate to decrement
@n_days: number of days to move


<!-- ##### FUNCTION g_date_add_months ##### -->
<para>
Increments a date by some number of months. If the day of the month is
greater than 28, this routine may change the day of the month (because
the destination month may not have the current day in it). The date
must be valid.
</para>

@date: a #GDate to increment
@n_months: number of months to move forward


<!-- ##### FUNCTION g_date_subtract_months ##### -->
<para>
Moves a date some number of months into the past. If the current day of
the month doesn't exist in the destination month, the day of the month
may change. The date must be valid.
</para>

@date: a #GDate to decrement
@n_months: number of months to move


<!-- ##### FUNCTION g_date_add_years ##### -->
<para>
Increments a date by some number of years. If the date is February 29,
and the destination year is not a leap year, the date will be changed
to February 28. The date must be valid.
</para>

@date: a #GDate to increment
@n_years: number of years to move forward


<!-- ##### FUNCTION g_date_subtract_years ##### -->
<para>
Moves a date some number of years into the past. If the current day
doesn't exist in the destination year (i.e. it's February 29 and you
move to a non-leap-year) then the day is changed to February 29. The date
must be valid.
</para>

@date: a #GDate to decrement
@n_years: number of years to move


<!-- ##### FUNCTION g_date_days_between ##### -->
<para>
Computes the number of days between two dates.
If @date2 is prior to @date1, the returned value is negative.
Both dates must be valid.
</para>

@date1: the first date
@date2: the second date
@Returns: the number of days between @date1 and @date2


<!-- ##### FUNCTION g_date_compare ##### -->
<para>
qsort()-style comparsion function for dates. Both
dates must be valid.
</para>

@lhs: first date to compare
@rhs: second date to compare
@Returns: 0 for equal, less than zero if @lhs is less than @rhs,
    greater than zero if @lhs is greater than @rhs


<!-- ##### FUNCTION g_date_clamp ##### -->
<para>
If @date is prior to @min_date, sets @date equal to @min_date.
If @date falls after @max_date, sets @date equal to @max_date.
Otherwise, @date is unchanged.
Either of @min_date and @max_date may be %NULL.  All non-%NULL dates
must be valid.
</para>

@date: a #GDate to clamp
@min_date: minimum accepted value for @date
@max_date: maximum accepted value for @date


<!-- ##### FUNCTION g_date_order ##### -->
<para>
Checks if @date1 is less than or equal to @date2,
and swap the values if this is not the case.
</para>

@date1: the first date
@date2: the second date


<!-- ##### FUNCTION g_date_get_day ##### -->
<para>
Returns the day of the month. The date must be valid.
</para>

@date: a #GDate to extract the day of the month from
@Returns: day of the month


<!-- ##### FUNCTION g_date_get_month ##### -->
<para>
Returns the month of the year. The date must be valid.
</para>

@date: a #GDate to get the month from
@Returns: month of the year as a #GDateMonth


<!-- ##### FUNCTION g_date_get_year ##### -->
<para>
Returns the year of a #GDate. The date must be valid.
</para>

@date: a #GDate
@Returns: year in which the date falls


<!-- ##### FUNCTION g_date_get_julian ##### -->
<para>
Returns the Julian day or "serial number" of the #GDate. The
Julian day is simply the number of days since January 1, Year 1; i.e.,
January 1, Year 1 is Julian day 1; January 2, Year 1 is Julian day 2,
etc. The date must be valid.
</para>

@date: a #GDate to extract the Julian day from
@Returns: Julian day


<!-- ##### FUNCTION g_date_get_weekday ##### -->
<para>
Returns the day of the week for a #GDate. The date must be valid.
</para>

@date: a #GDate.
@Returns: day of the week as a #GDateWeekday.


<!-- ##### FUNCTION g_date_get_day_of_year ##### -->
<para>
Returns the day of the year, where Jan 1 is the first day of the
year. The date must be valid.
</para>

@date: a #GDate to extract day of year from
@Returns: day of the year


<!-- ##### FUNCTION g_date_get_days_in_month ##### -->
<para>
Returns the number of days in a month, taking leap years into account.
</para>

@month: month
@year: year
@Returns: number of days in @month during the @year


<!-- ##### FUNCTION g_date_is_first_of_month ##### -->
<para>
Returns %TRUE if the date is on the first of a month. The date must be valid.
</para>

@date: a #GDate to check
@Returns: %TRUE if the date is the first of the month


<!-- ##### FUNCTION g_date_is_last_of_month ##### -->
<para>
Returns %TRUE if the date is the last day of the month. The date must be valid.
</para>

@date: a #GDate to check
@Returns: %TRUE if the date is the last day of the month


<!-- ##### FUNCTION g_date_is_leap_year ##### -->
<para>
Returns %TRUE if the year is a leap year.<footnote><para>
For the purposes of this function, leap year is every year divisible by
4 unless that year is divisible by 100. If it is divisible by 100 it would 
be a leap year only if that year is also divisible by 400.</para></footnote>
</para>

@year: year to check
@Returns: %TRUE if the year is a leap year


<!-- ##### FUNCTION g_date_get_monday_week_of_year ##### -->
<para>
Returns the week of the year, where weeks are understood to start on
Monday. If the date is before the first Monday of the year, return
0. The date must be valid.
</para>

@date: a #GDate
@Returns: week of the year


<!-- ##### FUNCTION g_date_get_monday_weeks_in_year ##### -->
<para>
Returns the number of weeks in the year, where weeks are taken to start
on Monday. Will be 52 or 53. The date must be valid. (Years always have 52
7-day periods, plus 1 or 2 extra days depending on whether it's a leap
year. This function is basically telling you how many Mondays are in
the year, i.e. there are 53 Mondays if one of the extra days happens
to be a Monday.)
</para>

@year: a year
@Returns: number of Mondays in the year


<!-- ##### FUNCTION g_date_get_sunday_week_of_year ##### -->
<para>
Returns the week of the year during which this date falls, if weeks 
are understood to being on Sunday. The date must be valid. Can return 0 if 
the day is before the first Sunday of the year.
</para>

@date: a #GDate
@Returns: week number


<!-- ##### FUNCTION g_date_get_sunday_weeks_in_year ##### -->
<para>
Returns the number of weeks in the year, where weeks are taken to start
on Sunday. Will be 52 or 53. The date must be valid. (Years always have 52
7-day periods, plus 1 or 2 extra days depending on whether it's a leap
year. This function is basically telling you how many Sundays are in
the year, i.e. there are 53 Sundays if one of the extra days happens
to be a Sunday.)
</para>

@year: year to count weeks in
@Returns: number of weeks


<!-- ##### FUNCTION g_date_get_iso8601_week_of_year ##### -->
<para>

</para>

@date: 
@Returns: 


<!-- ##### FUNCTION g_date_strftime ##### -->
<para>
Generates a printed representation of the date, in a 
<link linkend="setlocale">locale</link>-specific way. Works just like 
the platform's C library strftime() function, but only accepts date-related 
formats; time-related formats give undefined results. Date must be valid. 
Unlike strftime() (which uses the locale encoding), works on a UTF-8 format 
string and stores a UTF-8 result.
</para>

<para>
This function does not provide any conversion specifiers in addition
to those implemented by the platform's C library. For example, don't
expect that using g_date_strftime() would make the %F provided by the C99 
strftime() work on Windows where the C library only complies to C89.
</para>

@s: destination buffer
@slen: buffer size
@format: format string
@date: valid #GDate
@Returns: number of characters written to the buffer, or 0 the buffer was too small


<!-- ##### FUNCTION g_date_to_struct_tm ##### -->
<para>
Fills in the date-related bits of a <structname>struct tm</structname>
using the @date value. Initializes the non-date parts with something
sane but meaningless.
</para>

@date: a #GDate to set the <structname>struct tm</structname> from.
@tm: <structname>struct tm</structname> to fill.


<!-- ##### FUNCTION g_date_valid ##### -->
<para>
Returns %TRUE if the #GDate represents an existing day. The date must not
contain garbage; it should have been initialized with g_date_clear()
if it wasn't allocated by one of the g_date_new() variants.
</para>

@date: a #GDate to check
@Returns: Whether the date is valid


<!-- ##### FUNCTION g_date_valid_day ##### -->
<para>
Returns %TRUE if the day of the month is valid (a day is valid if it's
between 1 and 31 inclusive).
</para>

@day: day to check
@Returns: %TRUE if the day is valid


<!-- ##### FUNCTION g_date_valid_month ##### -->
<para>
Returns %TRUE if the month value is valid. The 12 #GDateMonth
enumeration values are the only valid months.
</para>

@month: month
@Returns: %TRUE if the month is valid


<!-- ##### FUNCTION g_date_valid_year ##### -->
<para>
Returns %TRUE if the year is valid. Any year greater than 0 is valid,
though there is a 16-bit limit to what #GDate will understand.
</para>

@year: year
@Returns: %TRUE if the year is valid


<!-- ##### FUNCTION g_date_valid_dmy ##### -->
<para>
Returns %TRUE if the day-month-year triplet forms a valid, existing day
in the range of days #GDate understands (Year 1 or later, no more than
a few thousand years in the future).
</para>

@day: day
@month: month
@year: year
@Returns: %TRUE if the date is a valid one


<!-- ##### FUNCTION g_date_valid_julian ##### -->
<para>
Returns %TRUE if the Julian day is valid. Anything greater than zero 
is basically a valid Julian, though there is a 32-bit limit.
</para>

@julian_date: Julian day to check
@Returns: %TRUE if the Julian day is valid


<!-- ##### FUNCTION g_date_valid_weekday ##### -->
<para>
Returns %TRUE if the weekday is valid. The seven #GDateWeekday enumeration
values are the only valid weekdays.
</para>

@weekday: weekday
@Returns: %TRUE if the weekday is valid


