# HG changeset patch # User Timo Sirainen # Date 1213316964 -10800 # Node ID 1b1fe3d50079a15e74fcae308a25d586d5e213fc # Parent e557042b2c1cf46ff2926c0dbdfdc84b887959ff Added imap_to_datetime_tz() to create IMAP date-time with specified timezone. diff -r e557042b2c1c -r 1b1fe3d50079 src/lib-imap/imap-date.c --- a/src/lib-imap/imap-date.c Thu Jun 12 13:16:08 2008 +0300 +++ b/src/lib-imap/imap-date.c Fri Jun 13 03:29:24 2008 +0300 @@ -158,14 +158,11 @@ 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 @@ 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 -r e557042b2c1c -r 1b1fe3d50079 src/lib-imap/imap-date.h --- a/src/lib-imap/imap-date.h Thu Jun 12 13:16:08 2008 +0300 +++ b/src/lib-imap/imap-date.h Fri Jun 13 03:29:24 2008 +0300 @@ -12,7 +12,9 @@ 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