|
8 | 8 | * |
9 | 9 | * |
10 | 10 | * IDENTIFICATION |
11 | | - * $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.78 2003/02/22 05:57:45 tgl Exp $ |
| 11 | + * $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.79 2003/02/27 21:36:58 tgl Exp $ |
12 | 12 | * |
13 | 13 | *------------------------------------------------------------------------- |
14 | 14 | */ |
@@ -2865,13 +2865,26 @@ timestamp_part(PG_FUNCTION_ARGS) |
2865 | 2865 | switch (val) |
2866 | 2866 | { |
2867 | 2867 | case DTK_EPOCH: |
| 2868 | + { |
| 2869 | + int tz; |
| 2870 | + TimestampTz timestamptz; |
| 2871 | + |
| 2872 | + /* convert to timestamptz to produce consistent results */ |
| 2873 | + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) |
| 2874 | + elog(ERROR, "Unable to convert TIMESTAMP to TIMESTAMP WITH TIME ZONE (tm)"); |
| 2875 | + |
| 2876 | + tz = DetermineLocalTimeZone(tm); |
| 2877 | + |
| 2878 | + if (tm2timestamp(tm, fsec, &tz, ×tamptz) != 0) |
| 2879 | + elog(ERROR, "Unable to convert TIMESTAMP to TIMESTAMP WITH TIME ZONE"); |
| 2880 | + |
2868 | 2881 | #ifdef HAVE_INT64_TIMESTAMP |
2869 | | - result = ((timestamp - SetEpochTimestamp()) / 1000000e0); |
| 2882 | + result = ((timestamptz - SetEpochTimestamp()) / 1000000e0); |
2870 | 2883 | #else |
2871 | | - result = timestamp - SetEpochTimestamp(); |
| 2884 | + result = timestamptz - SetEpochTimestamp(); |
2872 | 2885 | #endif |
2873 | 2886 | break; |
2874 | | - |
| 2887 | + } |
2875 | 2888 | case DTK_DOW: |
2876 | 2889 | if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) |
2877 | 2890 | elog(ERROR, "Unable to encode TIMESTAMP"); |
|
0 commit comments