datetime: Re-use add_dmy()

Avoid code duplication.
This commit is contained in:
Emmanuele Bassi 2010-08-26 12:58:19 +01:00
parent 3c86a77ae5
commit 9a61fb2c64
2 changed files with 10 additions and 50 deletions

View File

@ -792,22 +792,11 @@ g_date_time_add_years (const GDateTime *datetime,
gint years) gint years)
{ {
GDateTime *dt; GDateTime *dt;
gint day;
g_return_val_if_fail (datetime != NULL, NULL); g_return_val_if_fail (datetime != NULL, NULL);
day = g_date_time_get_day_of_month (datetime); dt = g_date_time_copy (datetime);
if (g_date_time_is_leap_year (datetime) && g_date_time_add_dmy (dt, years, 0, 0);
g_date_time_get_month (datetime) == 2)
{
if (day == 29)
day--;
}
dt = g_date_time_new_from_date (g_date_time_get_year (datetime) + years,
g_date_time_get_month (datetime),
day);
dt->usec = datetime->usec;
return dt; return dt;
} }
@ -830,43 +819,11 @@ g_date_time_add_months (const GDateTime *datetime,
gint months) gint months)
{ {
GDateTime *dt; GDateTime *dt;
gint year,
month,
day,
i,
a;
const guint16 *days;
g_return_val_if_fail (datetime != NULL, NULL); g_return_val_if_fail (datetime != NULL, NULL);
g_return_val_if_fail (months != 0, NULL);
month = g_date_time_get_month (datetime); dt = g_date_time_copy (datetime);
year = g_date_time_get_year (datetime); g_date_time_add_dmy (dt, 0, months, 0);
a = months > 0 ? 1 : -1;
for (i = 0; i < ABS (months); i++)
{
month += a;
if (month < 1)
{
year--;
month = 12;
}
else if (month > 12)
{
year++;
month = 1;
}
}
day = g_date_time_get_day_of_month (datetime);
days = days_in_months [GREGORIAN_LEAP (year) ? 1 : 0];
if (days[month] < day)
day = days[month];
dt = g_date_time_new_from_date (year, month, day);
dt->usec = datetime->usec;
return dt; return dt;
} }
@ -915,7 +872,7 @@ g_date_time_add_days (const GDateTime *datetime,
g_return_val_if_fail (datetime != NULL, NULL); g_return_val_if_fail (datetime != NULL, NULL);
dt = g_date_time_copy (datetime); dt = g_date_time_copy (datetime);
g_date_time_add_days_internal (dt, days); g_date_time_add_dmy (dt, 0, 0, days);
return dt; return dt;
} }

View File

@ -74,12 +74,15 @@ test_GDateTime_now (void)
get_localtime_tm (time (NULL), &tm); get_localtime_tm (time (NULL), &tm);
dt = g_date_time_new_now (); dt = g_date_time_new_now ();
g_assert_cmpint (g_date_time_get_year (dt), ==, 1900 + tm.tm_year); g_assert_cmpint (g_date_time_get_year (dt), ==, 1900 + tm.tm_year);
g_assert_cmpint (g_date_time_get_month (dt), ==, 1 + tm.tm_mon); g_assert_cmpint (g_date_time_get_month (dt), ==, 1 + tm.tm_mon);
g_assert_cmpint (g_date_time_get_day_of_month (dt), ==, tm.tm_mday); g_assert_cmpint (g_date_time_get_day_of_month (dt), ==, tm.tm_mday);
g_assert_cmpint (g_date_time_get_hour (dt), ==, tm.tm_hour); g_assert_cmpint (g_date_time_get_hour (dt), ==, tm.tm_hour);
g_assert_cmpint (g_date_time_get_minute (dt), ==, tm.tm_min); g_assert_cmpint (g_date_time_get_minute (dt), ==, tm.tm_min);
g_assert_cmpint (g_date_time_get_second (dt), ==, tm.tm_sec); /* XXX we need some fuzzyness here */
g_assert_cmpint (g_date_time_get_second (dt), >=, tm.tm_sec);
g_date_time_unref (dt); g_date_time_unref (dt);
} }