From: Timo Sirainen Date: Fri, 13 Jun 2008 00:29:24 +0000 (+0300) Subject: Added imap_to_datetime_tz() to create IMAP date-time with specified timezone. X-Git-Tag: 1.2.alpha1~323 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=74e50e77b2be0c2b79336fb0a5e2fa0eea4c97aa;p=thirdparty%2Fdovecot%2Fcore.git Added imap_to_datetime_tz() to create IMAP date-time with specified timezone. --HG-- branch : HEAD --- diff --git a/src/lib-imap/imap-date.c b/src/lib-imap/imap-date.c index 2ff7289640..b4d2e4bd61 100644 --- a/src/lib-imap/imap-date.c +++ b/src/lib-imap/imap-date.c @@ -158,14 +158,11 @@ bool imap_parse_datetime(const char *str, time_t *timestamp_r, return TRUE; } -const char *imap_to_datetime(time_t timestamp) +static const char * +imap_to_datetime_tm(const struct tm *tm, int timezone_offset) { char *buf; - struct tm *tm; - int timezone_offset, year; - - tm = localtime(×tamp); - timezone_offset = utc_offset(tm, timestamp); + int year; /* @UNSAFE: but faster than t_strdup_printf() call.. */ buf = t_malloc(27); @@ -211,3 +208,22 @@ const char *imap_to_datetime(time_t timestamp) return buf; } + +const char *imap_to_datetime(time_t timestamp) +{ + struct tm *tm; + int timezone_offset; + + tm = localtime(×tamp); + timezone_offset = utc_offset(tm, timestamp); + return imap_to_datetime_tm(tm, timezone_offset); +} + +const char *imap_to_datetime_tz(time_t timestamp, int timezone_offset) +{ + const struct tm *tm; + time_t adjusted = timestamp + timezone_offset*60; + + tm = gmtime(&adjusted); + return imap_to_datetime_tm(tm, timezone_offset); +} diff --git a/src/lib-imap/imap-date.h b/src/lib-imap/imap-date.h index 475bb3814d..d5055eb32f 100644 --- a/src/lib-imap/imap-date.h +++ b/src/lib-imap/imap-date.h @@ -12,7 +12,9 @@ bool imap_parse_date(const char *str, time_t *timestamp_r); bool imap_parse_datetime(const char *str, time_t *timestamp_r, int *timezone_offset_r); -/* Returns given UTC time in local timezone. */ +/* Returns given UTC timestamp as IMAP date-time string in local timezone. */ const char *imap_to_datetime(time_t timestamp); +/* Returns given UTC timestamp as IMAP date-time string in given timezone. */ +const char *imap_to_datetime_tz(time_t timestamp, int timezone_offset); #endif