Обсуждение: timestamp with time zone
Hi,
Can someone enlighten me?
I know that I can insert date/time data along with time zone info into
the timestamp with time zone data type. My question is, can I extract
the *original* time zone info afterward? I seems impossible.
May be I should use date + time with time zone to preserve the time
zone info?
It seems the time with time zone data type can do this.
test=# create table t2(t time with time zone);
CREATE TABLE
test=#
test=# insert into t2 values('12:34:56 +0400');
INSERT 0 1
test=# select * from t2;
t
-------------
12:34:56+04
(1 row)
test=# select t at time zone 'jst' from t2;
timezone
-------------
17:34:56+09
(1 row)
test=# select t::time from t2;
t
----------
12:34:56
(1 row)
--
Tatsuo Ishii
SRA OSS, Inc. Japan
Tatsuo Ishii wrote:
> Hi,
> test=# select t at time zone 'jst' from t2;
> timezone
> -------------
> 17:34:56+09
> (1 row)
>
> test=# select t::time from t2;
> t
> ----------
> 12:34:56
> (1 row)
Hello,
timezone_test=# select cast(t as time with time zone) from t2;
t
-------------
12:34:56+04
(1 row)
?
Sincerely,
Joshua D. Drake
> Tatsuo Ishii wrote:
> > Hi,
>
> > test=# select t at time zone 'jst' from t2;
> > timezone
> > -------------
> > 17:34:56+09
> > (1 row)
> >
> > test=# select t::time from t2;
> > t
> > ----------
> > 12:34:56
> > (1 row)
>
> Hello,
>
> timezone_test=# select cast(t as time with time zone) from t2;
> t
> -------------
> 12:34:56+04
> (1 row)
>
> ?
I know that I can it with time with time zone. What I cannot do with
is, timestamp with time zone.
test=# \d t1
Table "public.t1"
Column | Type | Modifiers
--------+--------------------------+-----------
t | timestamp with time zone |
test=# insert into t1 values('2007-12-13 12:34:56 +0400');
INSERT 0 1
test=# select * from t1;
t
------------------------
2007-12-13 17:34:56+09
(1 row)
Can I get "+04" without knowing that I inserted the data using "+0400"
time zone?
--
Tatsuo Ishii
SRA OSS, Inc. Japan
> > Tatsuo Ishii wrote:
> > > Hi,
> >
> > > test=# select t at time zone 'jst' from t2;
> > > timezone
> > > -------------
> > > 17:34:56+09
> > > (1 row)
> > >
> > > test=# select t::time from t2;
> > > t
> > > ----------
> > > 12:34:56
> > > (1 row)
> >
> > Hello,
> >
> > timezone_test=# select cast(t as time with time zone) from t2;
> > t
> > -------------
> > 12:34:56+04
> > (1 row)
> >
> > ?
>
> I know that I can it with time with time zone. What I cannot do with
> is, timestamp with time zone.
>
> test=# \d t1
> Table "public.t1"
> Column | Type | Modifiers
> --------+--------------------------+-----------
> t | timestamp with time zone |
>
> test=# insert into t1 values('2007-12-13 12:34:56 +0400');
> INSERT 0 1
> test=# select * from t1;
> t
> ------------------------
> 2007-12-13 17:34:56+09
> (1 row)
>
> Can I get "+04" without knowing that I inserted the data using "+0400"
> time zone?
No. The closest you can get is to store the tz in a different column and use AT TIMEZONE (which accepts a column name
asargument)
/Magnus
From: "Magnus Hagander" <magnus@hagander.net>
Subject: Re: [GENERAL] timestamp with time zone
Date: Thu, 13 Dec 2007 07:45:18 +0100
Message-ID: <200712130745190000@2192011050>
> > > Tatsuo Ishii wrote:
> > > > Hi,
> > >
> > > > test=# select t at time zone 'jst' from t2;
> > > > timezone
> > > > -------------
> > > > 17:34:56+09
> > > > (1 row)
> > > >
> > > > test=# select t::time from t2;
> > > > t
> > > > ----------
> > > > 12:34:56
> > > > (1 row)
> > >
> > > Hello,
> > >
> > > timezone_test=# select cast(t as time with time zone) from t2;
> > > t
> > > -------------
> > > 12:34:56+04
> > > (1 row)
> > >
> > > ?
> >
> > I know that I can it with time with time zone. What I cannot do with
> > is, timestamp with time zone.
> >
> > test=# \d t1
> > Table "public.t1"
> > Column | Type | Modifiers
> > --------+--------------------------+-----------
> > t | timestamp with time zone |
> >
> > test=# insert into t1 values('2007-12-13 12:34:56 +0400');
> > INSERT 0 1
> > test=# select * from t1;
> > t
> > ------------------------
> > 2007-12-13 17:34:56+09
> > (1 row)
> >
> > Can I get "+04" without knowing that I inserted the data using "+0400"
> > time zone?
>
> No. The closest you can get is to store the tz in a different column and use AT TIMEZONE (which accepts a column name
asargument)
Or use date + time with time zone.
--
Tatsuo Ishii
SRA OSS, Inc. Japan
In article <20071214.001009.67102034.t-ishii@sraoss.co.jp>, Tatsuo Ishii <ishii@postgresql.org> wrote: % From: "Magnus Hagander" <magnus@hagander.net> [...] % > > Can I get "+04" without knowing that I inserted the data using "+0400" % > > time zone? % > No. The closest you can get is to store the tz in a different column % and use AT TIMEZONE (which accepts a column name as argument) % Or use date + time with time zone. This could cause problems if you want to insert a timestamp for a date with different DST settings. It also seems a lot more cumbersome to do it this way. -- Patrick TJ McPhee North York Canada ptjm@interlog.com