<!-- ##### 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 ##### -->


<!-- ##### 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: 


<!-- ##### 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>

@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 current locale 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>
<function>qsort()</function>-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.
Either @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.
</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 locale-specific
way. Works just like the standard C <function>strftime()</function>
function, but only accepts date-related formats; time-related formats
give undefined results. Date must be valid.
</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 7 #GDateWeekday enumeration
values are the only valid weekdays.
</para>

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


