utils: Move more API to gcal-date-time-utils.c

This commit is contained in:
Georges Basile Stavracas Neto
2019-04-26 13:57:05 -03:00
parent 527cb6fc5f
commit c52bacfc3f
19 changed files with 163 additions and 163 deletions
+111
View File
@@ -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);
}