Search Postgresql Archives

Re: Yet Another Timestamp Question: Time Defaults

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Monday, January 21, 2013 at 10:53, Steve Crawford wrote:

On 01/21/2013 02:48 PM, Gavan Schneider wrote:
....
Taking another tangent I would much prefer the default time to be 12:00:00 for the conversion of a date to timestamp(+/-timezone).

Propose: '2013-12-25'::timestamp ==> 2013-12-25 12:00:00

The benefit of the midday point is that the actual date will not change when going through the timezone conversion.

Just like it doesn't change now? (I just checked against all of the
more than 1,100 zones in PG without seeing a problem.)

I find this result strange to say the least... our conversation is straddling Monday(you)/Tuesday(me). We shared the time point 2013-01-22 01:30 UTC, but called it different things, viz., 2013-01-22 12:30 and 2013-01-21 17:30.

And any definition based on midnight(UTC) will cast to either side of the date line depending on the local timezone. This "is not a problem" per se. It just brings me back to my point that sometimes the date is more important than the notion of a point in time. Hence:
This has implications for time-of-day insensitive data such as birthdays and other calendar values. I am still resolving "off by one day" errors that crept into many entries in my calendar and contacts from several years ago when data was added while travelling across multiple time zones (and I did report it as a bug back then). With this lesson learnt the workaround for me in my own applications since has been to store such dates as point-in-time for midday while keeping track of the input/output so it only gets used as a date... sometimes tedious, and a last resort. Mostly I have been actively avoiding anything with the taint of timezone due to this bad experience. It's time to reconsider, I guess, since this can cause other forms of silly behaviour.

Date/time is not trivial. ...

Total agreement here. And, as I said, I am going to school on this with a lot more insight after your's and other's input.
...
Meanwhile if I'm up at that hour and try to schedule a job ...

or possibly one of your machines is on the other side of the planet and running on tomorrow's time

Aesthetically (and/or mathematically) the midday point is more accurate. It is the middle of the relevant interval (i.e., 24 hours) implied by a date. Midnight is the extreme edge of any date (i.e., not what you would consider as mid-target). "Midnight" also has confusing English semantics since it can belong to either of its adjacent days.


Except for days that are 23-hours long, or 25, or other (it's a big
world with all sorts of timezone rules).

The day's length may change but I don't believe there is anywhere that allows for the local time of day to equal or be greater than 24:00:00 without rolling over to the next day.

How would that fit with ISO-8601?
    <http://en.wikipedia.org/wiki/ISO_8601#Times>

It's also very useful for common queries (select ... from somelog
where logtime > current_date) and provides a known starting-point from
which you can easily calculate the offsets you desire.

Agree, but aren't we better writing something like:
    SELECT ... FROM somelog WHERE logtime::date >= CURRENT_DATE;
and not relying on an implementation detail for correct behaviour.

Timestamps can always be busted back to lesser precision, i.e., date only, but adding time information to a date is extrapolation. IMNSHO this sort of thing should be avoided.

I don't know if the current behaviour will be deemed to be too rusted in place for change, or if this proposal has too many adverse consequences, but hope springs eternal. :)

Obviously there is no discussion if current PostgreSQL behaviour is SQL standards compliant. I don't think anyone should ask that existing standards compliance be undone.

It would sure break a lot of my queries. And for the many people who
want/expect the date to cast to date at 00:00:00 local time it would
lead to a load of pitfalls such as naively subtracting 12-hours or
requiring the programmer to add complexity to determine how many hours
to subtract based on local time zone and current date.

This is assuming that someone would need to "correct" the hour when there was never any time of day information originally present. The naivety here is in attempting to correct something that is arbitrary. This is already a problem with the current system when attempting to "correct" times in all timezones, i.e., how many hours to add for a least wrong estimate of the time?

But you are, of course, free to use the capability that PostgreSQL
gives you to define pretty much any data-type you want along with your
desired casting rules if you so desire. Just don't expect the built-in
definitions to change.

Thinking only, but it's way too early on my learning curve to venture there since such a data-type still has to play correctly with the rest of the system. And once I better know the system I may well have learnt to mitigate correctly in the relevant places. Mostly I avoid mixing timestamps with dates but figure I can't hide forever.

On Monday, January 21, 2013 at 14:53, Adrian Klaver wrote:

If I have learned anything about dealing with dates and times, is that
it is a set of exceptions bound together by a few rules. Every time
you think you have the little rascals cornered, one gets away.

One more level of nesting and we have a quote of Churchillian scope. :)

Regards
Gavan Schneider



--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux