While doing the mapping of some database columns into Java classes I stumbled onto this obscure SQL-92 Standard type (implemented by PostgreSQL, H2, and HyperSQL afaik). I haven't ever used it, but I wanted to understand how clearly map it to a Java type if I ever find it.
Here are the variants I can see:
Case A: The
TIMEtype, such as15:20:01. It's a "local time". The time zone is evident to the application so the database doesn't record it.Case B: The
TIMEwith offset, as in15:20:01+04:00. It represents a "world time". This time can be converted trivially to UTC, or to any other world clock.Case C: A
TIMEwith a time zone, such as15:20:01 EDT. Since the rules to interpret a time strongly depend on the specific date I can't really make any sense of it without the date; but then, if I add the date, it becomes aTIMESTAMP, and that's something totally different.
So, did the SQL Standard get it wrong? Or maybe "TIME with time zone" should be always interpreted as "time with offset" (case B)?