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 [method@GLib.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 Date the
fixed day is January 1, 1 AD. ("Julian" dates in the Date 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 [ctor@GLib.Date.new], or you can
declare an automatic variable or array and initialize it by calling [method@GLib.Date.clear]. A cleared date is safe; it's safe to call [
method@GLib.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 [method@GLib.Date.valid]
predicate. [method@GLib.Date.valid] is also used to check for errors with [method@GLib.Date.set_parse] and other functions that can fail.
Dates can be invalidated by calling [method@GLib.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.
Returns true if the day-month-year
triplet forms a valid, existing day in the range of days Date understands (Year 1 or later, no more than a
few thousand years in the future).