[bijiben] date-time: Rewrite logic to get date difference
- From: Isaque Galdino de Araujo <igaldino src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [bijiben] date-time: Rewrite logic to get date difference
- Date: Fri, 1 Dec 2017 16:41:22 +0000 (UTC)
commit 7886fb77dfed0ede9e4e16f1c05e231866149edf
Author: Mohammed Sadiq <sadiq sadiqpk org>
Date: Fri Nov 24 13:07:56 2017 +0530
date-time: Rewrite logic to get date difference
Blindly getting week, month, and year based on number of days
won't work right.
Let's use GDate to deduce this the right way.
Also GTimeVal is always 32 bit. Which means that the application
will break on 2038. Let's fix this so that mission critical systems
running bijiben won't fail on the date. :-)
https://bugzilla.gnome.org/show_bug.cgi?id=790779
src/libbiji/biji-date-time.c | 56 ++++++++++++++++++++++++++++-------------
1 files changed, 38 insertions(+), 18 deletions(-)
---
diff --git a/src/libbiji/biji-date-time.c b/src/libbiji/biji-date-time.c
index abb4a6e..0d0e10d 100644
--- a/src/libbiji/biji-date-time.c
+++ b/src/libbiji/biji-date-time.c
@@ -1,5 +1,6 @@
/* biji-date-time.c
* Copyright (C) Pierre-Yves LUYTEN 2011 <py luyten fr>
+ * Copyright (C) 2017 Mohammed Sadiq <sadiq sadiqpk org>
*
* bijiben is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -21,29 +22,48 @@
const gchar *
biji_get_time_diff_with_time (glong sec_since_epoch)
{
- GTimeVal now;
- glong diff;
+ GDate *now = g_date_new ();
+ GDate *date = g_date_new ();
+ gchar *str;
+ gint diff;
- /* Retrieve the number of days */
- g_get_current_time (&now);
- diff = (now.tv_sec - sec_since_epoch) / 86400 ;
+ g_return_val_if_fail (sec_since_epoch >= 0, _("Unknown"));
- if (diff < 1)
- return _("Today");
+ g_date_set_time_t (date, sec_since_epoch);
+ g_date_set_time_t (now, time (NULL));
+ diff = g_date_days_between (date, now);
- if (diff < 2)
- return _("Yesterday");
+ if (diff == 0)
+ {
+ str = _("Today");
+ }
+ else if (diff == 1)
+ {
+ str = _("Yesterday");
+ }
+ else if (diff < 7 &&
+ g_date_get_weekday (date) < g_date_get_weekday (now))
+ {
+ str = _("This week");
+ }
+ else if (diff < 0 || g_date_get_year (date) != g_date_get_year (now))
+ {
+ str = _("Unknown");
+ }
+ else if (diff < 31 &&
+ g_date_get_month (date) == g_date_get_month (now))
+ {
+ str = _("This month");
+ }
+ else
+ {
+ str = _("This year");
+ }
- if (diff < 7)
- return _("This week");
+ g_date_free (date);
+ g_date_free (now);
- if (diff < 30)
- return _("This month");
-
- if (diff < 365)
- return _("This year");
-
- return _("Unknown");
+ return str;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]