changeset 7838:1b1fe3d50079 HEAD

Added imap_to_datetime_tz() to create IMAP date-time with specified timezone.
author Timo Sirainen <tss@iki.fi>
date Fri, 13 Jun 2008 03:29:24 +0300
parents e557042b2c1c
children d076e1758c6a
files src/lib-imap/imap-date.c src/lib-imap/imap-date.h
diffstat 2 files changed, 25 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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(&timestamp);
-	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(&timestamp);
+	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);
+}
--- 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