Struct
GLibDate
Description [src]
struct GDate {
guint julian_days : 32;
guint julian : 1;
guint dmy : 1;
guint day : 6;
guint month : 4;
guint year : 16;
}
GDate
is a struct for calendrical calculations.
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 day.
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).
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 by calling g_date_clear()
.
A cleared date is safe; 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 invalid, 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.
It is very important to use the API to access the GDate
struct. Often only the
day-month-year or only the Julian representation is valid. Sometimes neither is valid.
Use the API.
GLib also features GDateTime
which represents a precise time.
Structure members
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
andyear
are valid.day
The day of the day-month-year representation of the date, as a number between 1 and 31.
month
The month of the day-month-year representation of the date, as a number between 1 and 12.
year
The year of the day-month-year representation of the date.
Constructors
g_date_new
Allocates a GDate
and initializes
it to a safe 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().
Functions
g_date_get_monday_weeks_in_year
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.).
g_date_get_sunday_weeks_in_year
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.).
g_date_strftime
Generates a printed representation of the date, in a
[locale][setlocale]-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.
g_date_valid_day
Returns TRUE
if the day of the month is valid (a day is valid if it’s
between 1 and 31 inclusive).
g_date_valid_dmy
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).
g_date_valid_julian
Returns TRUE
if the Julian day is valid. Anything greater than zero
is basically a valid Julian, though there is a 32-bit limit.
g_date_valid_month
Returns TRUE
if the month value is valid. The 12 GDateMonth
enumeration values are the only valid months.
g_date_valid_weekday
Returns TRUE
if the weekday is valid. The seven GDateWeekday
enumeration
values are the only valid weekdays.
g_date_valid_year
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.
Instance methods
g_date_add_days
Increments a date some number of days. To move forward by weeks, add weeks*7 days. The date must be valid.
g_date_add_months
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.
g_date_add_years
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.
g_date_clamp
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.
g_date_clear
Initializes one or more GDate
structs to a safe 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().
g_date_copy
Copies a GDate to a newly-allocated GDate. If the input was invalid (as determined by g_date_valid()), the invalid state will be copied as is into the new object.
since: 2.56
g_date_days_between
Computes the number of days between two dates.
If date2
is prior to date1
, the returned value is negative.
Both dates must be valid.
g_date_get_day_of_year
Returns the day of the year, where Jan 1 is the first day of the year. The date must be valid.
g_date_get_iso8601_week_of_year
Returns the week of the year, where weeks are interpreted according to ISO 8601.
since: 2.6
g_date_get_julian
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.
g_date_get_monday_week_of_year
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.
g_date_get_sunday_week_of_year
Returns the week of the year during which this date falls, if weeks are understood to begin on Sunday. The date must be valid. Can return 0 if the day is before the first Sunday of the year.
g_date_is_first_of_month
Returns TRUE
if the date is on the first of a month.
The date must be valid.
g_date_is_last_of_month
Returns TRUE
if the date is the last day of the month.
The date must be valid.
g_date_order
Checks if date1
is less than or equal to date2
,
and swap the values if this is not the case.
g_date_set_day
Sets the day of the month for a GDate
. If the resulting
day-month-year triplet is invalid, the date will be invalid.
g_date_set_dmy
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.
g_date_set_month
Sets the month of the year for a GDate
. If the resulting
day-month-year triplet is invalid, the date will be invalid.
g_date_set_parse
Parses a user-inputted string str
, and try to figure out what date it
represents, taking the [current locale][setlocale] 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.
g_date_set_time
Sets the value of a date from a GTime
value.
The time to date conversion is done using the user’s current timezone.
deprecated: 2.10
g_date_set_time_t
Sets the value of a date to the date corresponding to a time specified as a time_t. The time to date conversion is done using the user’s current timezone.
since: 2.10
g_date_set_time_val
Sets the value of a date from a GTimeVal
value. Note that the
tv_usec
member is ignored, because GDate
can’t make use of the
additional precision.
deprecated: 2.62 since: 2.10
g_date_set_year
Sets the year for a GDate
. If the resulting day-month-year
triplet is invalid, the date will be invalid.
g_date_subtract_days
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.
g_date_subtract_months
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.
g_date_subtract_years
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.
g_date_to_struct_tm
Fills in the date-related bits of a struct tm using the date
value.
Initializes the non-date parts with something safe but meaningless.
g_date_valid
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.