X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id AC5638BA512 for ; Mon, 21 Feb 2005 16:06:12 +0000 (GMT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 19149-01 for ; Mon, 21 Feb 2005 16:06:03 +0000 (GMT) Received: from matrix.gatewaynet.com (matrix.gatewaynet.com [217.19.69.50]) by svr1.postgresql.org (Postfix) with ESMTP id 095ED8BA2BF for ; Mon, 21 Feb 2005 16:06:02 +0000 (GMT) Received: from matrix.gatewaynet.com (localhost.localdomain [127.0.0.1]) by matrix.gatewaynet.com (8.12.8/8.12.8) with ESMTP id j1LGi51M007577; Mon, 21 Feb 2005 18:44:05 +0200 Received: from localhost (achill@localhost) by matrix.gatewaynet.com (8.12.8/8.12.8/Submit) with ESMTP id j1LGi46v007573; Mon, 21 Feb 2005 18:44:05 +0200 Date: Mon, 21 Feb 2005 18:44:04 +0200 (EET) From: Achilleus Mantzios To: andrew@supernews.com Cc: pgsql-sql@postgresql.org Subject: Re: Timestamp with timezone question. In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=ISO-8859-7 Content-Transfer-Encoding: 8BIT X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests= X-Spam-Level: X-Archive-Number: 200502/225 X-Sequence-Number: 20336 O Andrew - Supernews έγραψε στις Feb 21, 2005 : > On 2005-02-21, Achilleus Mantzios wrote: > > Consider a schema designed to store internet mail. > > > > Since pgsql always converts a timestamptz to UTC, we have lost > > the information of the Sender's local timezone. > > > > Should i go with a separete date and timetz ? > > No. Consider instead storing a timestamptz with the actual time of the > mail, and a separate field with an interval representing the zone offset. > Then you can use AT TIME ZONE to recover the sender's local time. > > e.g. (this table has columns serial, timestamptz, interval) > > insert into dtz values (DEFAULT, > '2005-03-21 07:05:00 -0800', > '2005-03-21 07:05:00 -0800'::timestamp > - '2005-03-21 07:05:00 -0800'::timestamptz at time zone 'UTC' > ); > > (the timestamp - timestamptz thing is just a reasonably reliable way of > getting the timezone offset without complicated parsing.) > > select * from dtz; > id | t | z > ----+------------------------+----------- > 1 | 2005-03-21 15:05:00+00 | -08:00:00 > (1 row) > > select *, t at time zone z as ot from dtz; > id | t | z | ot > ----+------------------------+-----------+--------------------- > 1 | 2005-03-21 15:05:00+00 | -08:00:00 | 2005-03-21 07:05:00 > (1 row) Cool thanx. I ended up displaying the actual date header field of the SMTP message (just like the yahoo guys do). > > -- -Achilleus