diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 094993dfa9071a3b507444e6ee029f6f7078bace..cd0482dab64809595b939c61515ccdebd5ba4931 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -2405,6 +2405,10 @@ Wed, 17 Dec 2008 17:49:11 +0100
 
 	- Applied patch by ITAGAKI Takahiro <itagaki.takahiro@oss.ntt.co.jp> to
 	  fix segfault on non-glibc systems.
+
+Mon, 02 Feb 2009 16:34:53 +0100
+
+	- Fixed bug in handling of "%s" pattern in PGTYPEStimestamp_defmt_asc().
 	- Set pgtypes library version to 3.1.
 	- Set compat library version to 3.1.
 	- Set ecpg library version to 6.2.
diff --git a/src/interfaces/ecpg/pgtypeslib/dt_common.c b/src/interfaces/ecpg/pgtypeslib/dt_common.c
index 62a90352d47cb00ced2adf6f51e7e9beebb9ac69..d3e5396dc4129e634eb5bcbc940d519077d4027c 100644
--- a/src/interfaces/ecpg/pgtypeslib/dt_common.c
+++ b/src/interfaces/ecpg/pgtypeslib/dt_common.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/dt_common.c,v 1.44 2007/11/15 21:14:45 momjian Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/dt_common.c,v 1.45 2009/02/02 15:35:28 meskes Exp $ */
 
 #include "postgres_fe.h"
 
@@ -990,17 +990,13 @@ GetEpochTime(struct tm * tm)
 
 	t0 = gmtime(&epoch);
 
-	tm->tm_year = t0->tm_year;
-	tm->tm_mon = t0->tm_mon;
+	tm->tm_year = t0->tm_year + 1900;
+	tm->tm_mon = t0->tm_mon + 1;
 	tm->tm_mday = t0->tm_mday;
 	tm->tm_hour = t0->tm_hour;
 	tm->tm_min = t0->tm_min;
 	tm->tm_sec = t0->tm_sec;
 
-	if (tm->tm_year < 1900)
-		tm->tm_year += 1900;
-	tm->tm_mon++;
-
 	return;
 }	/* GetEpochTime() */
 
@@ -2856,8 +2852,8 @@ PGTYPEStimestamp_defmt_scan(char **str, char *fmt, timestamp * d,
 					time_t		et = (time_t) scan_val.luint_val;
 
 					tms = gmtime(&et);
-					*year = tms->tm_year;
-					*month = tms->tm_mon;
+					*year = tms->tm_year + 1900;
+					*month = tms->tm_mon + 1;
 					*day = tms->tm_mday;
 					*hour = tms->tm_hour;
 					*minute = tms->tm_min;
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c
index 356e3946c002398bceee8e7bfbd3b977ba281897..a52ad13fb9a94342e5572ec643a7c4a85ea381bb 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c
@@ -422,17 +422,24 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
 	free(text);
 
+	in = "1234567890";
+	fmt = "%s";
+	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
+	text = PGTYPEStimestamp_to_asc(ts1);
+	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
+	free(text);
+
 	{ ECPGtrans(__LINE__, NULL, "rollback");
-#line 351 "dt_test.pgc"
+#line 358 "dt_test.pgc"
 
 if (sqlca.sqlcode < 0) sqlprint ( );}
-#line 351 "dt_test.pgc"
+#line 358 "dt_test.pgc"
 
         { ECPGdisconnect(__LINE__, "CURRENT");
-#line 352 "dt_test.pgc"
+#line 359 "dt_test.pgc"
 
 if (sqlca.sqlcode < 0) sqlprint ( );}
-#line 352 "dt_test.pgc"
+#line 359 "dt_test.pgc"
 
 
 	return (0);
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stderr b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stderr
index a068d5ef1cb4e0e051ec7a0b75b69e9df4769177..08680b9ccf3ae9f3f4ed2519f7d57246df3def27 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stderr
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stderr
@@ -42,7 +42,7 @@
 [NO_PID]: sqlca: code: 0, state: 00000
 [NO_PID]: ecpg_get_data on line 38: RESULT: 2000-07-12 17:34:29 offset: -1; array: yes
 [NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ECPGtrans on line 351: action "rollback"; connection "regress1"
+[NO_PID]: ECPGtrans on line 358: action "rollback"; connection "regress1"
 [NO_PID]: sqlca: code: 0, state: 00000
 [NO_PID]: ecpg_finish: connection regress1 closed
 [NO_PID]: sqlca: code: 0, state: 00000
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stdout b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stdout
index 03f01de0c6fb2e1b2ab64769d94e4306cd14ac56..a2ff5f7a3b23222a6e1abad0a13aa8dd24cc6f27 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stdout
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stdout
@@ -46,3 +46,4 @@ timestamp_defmt_asc(September 6 at 01:30 pm in the year 1983, %B %d at %I:%M %p
 timestamp_defmt_asc(  1976, July 14. Time: 9:15am, %Y,   %B %d. Time: %I:%M %p) = 1976-07-14 09:15:00, error: 0
 timestamp_defmt_asc(  1976, July 14. Time: 9:15 am, %Y,   %B %d. Time: %I:%M%p) = 1976-07-14 09:15:00, error: 0
 timestamp_defmt_asc(  1976, P.M. July 14. Time: 9:15, %Y, %P  %B %d. Time: %I:%M) = 1976-07-14 21:15:00, error: 0
+timestamp_defmt_asc(1234567890, %s) = 2009-02-13 23:31:30, error: 0
diff --git a/src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc b/src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc
index fcf39cecc7c07bcb478f41480399fef228fd58bb..3ed20614541f734fccfeaa3fe1602109ff42ca96 100644
--- a/src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc
+++ b/src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc
@@ -348,6 +348,13 @@ main(void)
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
 	free(text);
 
+	in = "1234567890";
+	fmt = "%s";
+	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
+	text = PGTYPEStimestamp_to_asc(ts1);
+	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
+	free(text);
+
 	exec sql rollback;
         exec sql disconnect;