+/**
+ * Return the current year (i.e. '2011').
+ */
+unsigned int
+GNUNET_TIME_get_current_year ()
+{
+ time_t tp;
+ struct tm *t;
+
+ tp = time (NULL);
+ t = gmtime (&tp);
+ if (t == NULL)
+ return 0;
+ return t->tm_year + 1900;
+}
+
+
+/**
+ * Convert an expiration time to the respective year (rounds)
+ *
+ * @param at absolute time
+ * @return year a year (after 1970), 0 on error
+ */
+unsigned int
+GNUNET_TIME_time_to_year (struct GNUNET_TIME_Absolute at)
+{
+ struct tm *t;
+ time_t tp;
+
+ tp = at.abs_value_us / 1000LL / 1000LL; /* microseconds to seconds */
+ t = gmtime (&tp);
+ if (t == NULL)
+ return 0;
+ return t->tm_year + 1900;
+
+}
+
+
+/**
+ * Convert a year to an expiration time of January 1st of that year.
+ *
+ * @param year a year (after 1970, please ;-)).
+ * @return absolute time for January 1st of that year.
+ */
+struct GNUNET_TIME_Absolute
+GNUNET_TIME_year_to_time (unsigned int year)
+{
+ struct GNUNET_TIME_Absolute ret;
+ time_t tp;
+ struct tm t;
+
+ memset (&t, 0, sizeof (t));
+ if (year < 1900)
+ {
+ GNUNET_break (0);
+ return GNUNET_TIME_absolute_get (); /* now */
+ }
+ t.tm_year = year - 1900;
+ t.tm_mday = 1;
+ t.tm_mon = 0;
+ t.tm_wday = 1;
+ t.tm_yday = 1;
+ tp = mktime (&t);
+ GNUNET_break (tp != (time_t) - 1);
+ ret.abs_value_us = tp * 1000LL * 1000LL; /* seconds to microseconds */
+ return ret;
+}
+
+
+