utils: Move more API to gcal-date-time-utils.c
This commit is contained in:
@@ -114,3 +114,114 @@ gcal_date_time_get_end_of_week (GDateTime *date)
|
||||
week_start = gcal_date_time_get_start_of_week (date);
|
||||
return g_date_time_add_weeks (week_start, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_date_time_compare_date:
|
||||
* @dt1: (nullable): a #GDateTime
|
||||
* @dt2: (nullable): a #GDateTime
|
||||
*
|
||||
* Compares the dates of @dt1 and @dt2. The times are
|
||||
* ignored.
|
||||
*
|
||||
* Returns: negative, 0 or positive
|
||||
*/
|
||||
gint
|
||||
gcal_date_time_compare_date (GDateTime *dt1,
|
||||
GDateTime *dt2)
|
||||
{
|
||||
if (!dt1 && !dt2)
|
||||
return 0;
|
||||
else if (!dt1)
|
||||
return -1;
|
||||
else if (!dt2)
|
||||
return 1;
|
||||
|
||||
if (g_date_time_get_year (dt1) != g_date_time_get_year (dt2))
|
||||
return (g_date_time_get_year (dt1) - g_date_time_get_year (dt2)) * 360;
|
||||
|
||||
if (g_date_time_get_month (dt1) != g_date_time_get_month (dt2))
|
||||
return (g_date_time_get_month (dt1) - g_date_time_get_month (dt2)) * 30;
|
||||
|
||||
if (g_date_time_get_day_of_month (dt1) != g_date_time_get_day_of_month (dt2))
|
||||
return g_date_time_get_day_of_month (dt1) - g_date_time_get_day_of_month (dt2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_date_time_to_icaltime:
|
||||
* @dt: a #GDateTime
|
||||
*
|
||||
* Converts the #GDateTime's @dt to an #icaltimetype.
|
||||
*
|
||||
* Returns: (transfer full): a #icaltimetype.
|
||||
*/
|
||||
icaltimetype*
|
||||
gcal_date_time_to_icaltime (GDateTime *dt)
|
||||
{
|
||||
icaltimetype *idt;
|
||||
|
||||
if (!dt)
|
||||
return NULL;
|
||||
|
||||
idt = g_new0 (icaltimetype, 1);
|
||||
|
||||
idt->year = g_date_time_get_year (dt);
|
||||
idt->month = g_date_time_get_month (dt);
|
||||
idt->day = g_date_time_get_day_of_month (dt);
|
||||
idt->hour = g_date_time_get_hour (dt);
|
||||
idt->minute = g_date_time_get_minute (dt);
|
||||
idt->second = g_date_time_get_seconds (dt);
|
||||
idt->is_date = (idt->hour == 0 &&
|
||||
idt->minute == 0 &&
|
||||
idt->second == 0);
|
||||
|
||||
return idt;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_date_time_is_date:
|
||||
* @dt: a #GDateTime
|
||||
*
|
||||
* Checks if @dt represents a date. A pure date
|
||||
* has the values of hour, minutes and seconds set
|
||||
* to 0.
|
||||
*
|
||||
* Returns: %TRUE if @dt is a date, %FALSE if it's a
|
||||
* timed datetime.
|
||||
*/
|
||||
gboolean
|
||||
gcal_date_time_is_date (GDateTime *dt)
|
||||
{
|
||||
return g_date_time_get_hour (dt) == 0 &&
|
||||
g_date_time_get_minute (dt) == 0 &&
|
||||
g_date_time_get_seconds (dt) == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_date_time_from_icaltime:
|
||||
* @date: an #icaltimetype
|
||||
*
|
||||
* Creates a #GDateTime from @date. The timezone is preserved.
|
||||
*
|
||||
* Returns: (transfer full): a #GDateTime.
|
||||
*/
|
||||
GDateTime*
|
||||
gcal_date_time_from_icaltime (const icaltimetype *date)
|
||||
{
|
||||
g_autoptr (GTimeZone) tz = NULL;
|
||||
g_autoptr (GDateTime) dt = NULL;
|
||||
|
||||
tz = date->zone ? g_time_zone_new (icaltime_get_tzid (*date)) : g_time_zone_new_utc ();
|
||||
dt = g_date_time_new (tz,
|
||||
date->year,
|
||||
date->month,
|
||||
date->day,
|
||||
date->is_date ? 0 : date->hour,
|
||||
date->is_date ? 0 : date->minute,
|
||||
date->is_date ? 0 : date->second);
|
||||
|
||||
return g_steal_pointer (&dt);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user