PostgreSQL has a several ways to store dates that might be problematic: - timestamp without time zone - date without a time of day. http://www.postgresql.org/docs/9.4/static/datatype-datetime.html
Assuming we're limiting the scope to PostgreSQL with one of these column types: (a) +1 for removing the "Z" (b) +1 for remapping PostgreSQL date column to the new Java date classes: - timestamp without time zone --> java.time.LocalTime - date without a time of day --> java.time.LocalDate From: Andreas Watermeyer <andreas.waterme...@its-telco.de> To: Ian Turton <ijtur...@gmail.com> Cc: geotools-devel <geotools-devel@lists.sourceforge.net> Sent: Monday, December 21, 2015 6:36 AM Subject: Re: [Geotools-devel] GEOT-5329: Proposal to avoid Date-shifting due to Timezones Hi all, thank you very much for your response. I did some more research on this: Most important: I was wrong, dates can be time zoned: http://www.w3.org/TR/xmlschema-2/#date. The XML spec for dates and times is inspired by ISO 8601. Both, the XML spec and ISO 8601 allow the time zone postfix "Z" for dates, according to http://www.cs.tut.fi/~jkorpela/iso8601.html. On the other hand I am still convinced, that the vast majority of systems require a time zone unaware date handling. This is also reflected by GEOT-5025, GEOS-1235, GEOS-1161, GEOT-5025 (CITE tests fail depending on time zone). My assumption is: - either java.sql.Date users use GeoTools in an area with a timezone offset > 0, where the problem just does not exist - the particular project has not even realized that dates are shifted by -1 But I can not imagine that anybody relies on the current implementation. I currently see two possible solutions: a) My proposal. But in this case the "Z" must be removed. Otherwise the date is considered time zoned, which is wrong. Without "Z" it is considered to be local, which would be correct. b) Making the behaviour configurable (certainly the best choice). I dont know very much of GeoTools. What would be the way to go? I could image to split the problem in two parts: 1) Support Java 8 Time API. By definition java.time.LocalDate has no time zone. It should be clear that such Date objects should be converted to strings without time zone. 2) Let the user control if a PostGIS date column should be published as java.sql.Date or java.time.LocalTime. I am unsure if JDBC can handle that out of the box, although it seems so (http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html) I suppose that is not an easy solution and I am probably not the one to implement it, having not enough GeoTools know-how. What do you think? BTW: Is it possible to run the CITE tests against GeoServer/GeoTools easily? Maybe as part of the build? How? Best regards, Andreas 2015-12-19 12:28 GMT+01:00 Ian Turton <ijtur...@gmail.com>: I'd hate to reopen this can of worms - feel free to see https://github.com/geotools/geotools/pull/808 & https://github.com/geotools/geotools/pull/872 & https://github.com/geotools/geotools/pull/775 and probably more besides. There is no good way to handle dates going into and out of the Databases we support without either forcing an explicit timezone or converting them to strings which makes filtering much harder. Please be very careful if you do make any changes to make sure all the tests pass as is. Ian On 19 December 2015 at 07:09, Andrea Aime <andrea.a...@geo-solutions.it> wrote: Hi Jody,there is indeed a chance this change will break CITE testing, however, weare running a old and buggy version of it.After six months of waiting for the new engine to be deployed on ares I'vehonestly lost interest and gave up (others feel free to resume the effort), but if we ever do get stuff on there, this change should probably be revisited. In particular, formatting the date with a Z ending it just seems out of spec,dates do not seem to have a timezone specifier:https://en.wikipedia.org/wiki/ISO_8601 Unless of course the wikipedia page misses some information comparedto the actual full ISO8601 standard. Now, to be honest, the notion of a date without a timezone is rather counter-intuitive to me (probably because I'm too used to work across a large span of timezones). Right now If you ask me what day it is, I'll say Saturday, but if we ask Jody, he'll say Friday (it's 8amnow in italy, but 11pm of the day before in Victoria, Canada). That is, to me, it does not make sense to talk about a date without a notionof timezone... it would not even make sense to have a thing called theinternational date line, a line that when crossed changes the current_day_ : https://en.wikipedia.org/wiki/International_Date_Line Citing a fitting example from that page:"Christmas, for example, is celebrated on 25 December (according to either the Gregorian or the Julian calendar, depending upon which of the two is used by the particular church) as that date falls in countries located on either side of the Date Line. Thus, whether it is Western Christmas or Orthodox Christmas, Christians in Samoa, immediately west of the Date Line, will celebrate the holiday a day before Christians in American Samoa, which is immediately east of the Date Line" That said, I fully understand that storing a pure date in a database, andhave it changed by the GML output to the day before/after isquite maddening, unless someone is really working in an international,world wide, setting (at which point, they probably want to be more preciseand use full timestamps) Maybe we should have some sort of way to control this behavior? CheersAndrea On Sat, Dec 19, 2015 at 1:52 AM, Jody Garnett <jody.garn...@gmail.com> wrote: Hey Andreas, interesting discussion. I just rejected a "workaround" (https://github.com/geotools/geotools/pull/997) on a similar topic - dealing with dates far in the past. We tend to base our datastore / query / filter API off the WFS - in particular we may be able to check the OGC docs for clarification (or ask on the standa...@osgeo.org email list). While your argument makes sense to me I would like to focus on interoperability if we can. --Jody Garnett On 18 December 2015 at 03:44, Andreas Watermeyer <andreas.waterme...@its-telco.de> wrote: Hi GeoTools-Developers, I recently created https://osgeo-org.atlassian.net/browse/GEOT-5329 to propose a patch to change GeoTools java.sql.Date to String conversion due to problems arising from timezones. Andrea Aime suggested involve this mailing list. Problem: A date (without time) in Postgres (2015-12-18) is delivered to client as 2015-12-17Z. This occurs due to internal time zone conversion to GMT. My understanding (from https://en.wikipedia.org/wiki/ISO_8601): Dates (without time component) are not related to time zones. They are unaware of time zones. Additionally: When talking about dates (without time), it does not matter, at which *time* the day starts or ends, it is just a date (without time). That means: People in Europe and Australia have same understanding of Jan 1st, but they have if different understand about when the day starts or ends. But this is about times *not* about dates. So, my suggestion is as follows: A date (without time) should not be changed on transfer, no matter of time zone boundaries. Reason: Dates are not time zone dependent. If somebody wants time zone dependent behaviour, it is required to specify a date and time, not a pure date. In Java Objects: Date (without time): java.sql.Date - shall be transferred unaware of time zones Date (with time): java.util.Date - shall be transferred using time zone shifting The proposed patch implements this concept. In other words: I think it is very unlikely, that anybody expects a date (without time) to be shifted, because of time zone difference. Especially in cases of a small offset of +/- 1h. The current behaviour implies that GeoTools consumers treat dates (without time) as timezone-aware date and time objects, transfer the date and time into the local time zone and treat it as date again. Note: Unfortunately java.sql.Date is internally time-based, which is an often criticized design decision and leads to constant confusion. I think this is the actual reason for this issue. One further aspect: GeoTools currently formats dates as "2015-12-18Z", "Z" for time zone UTC ("Zulu"). As far as I know this is required to be CITE compliant. Due to https://en.wikipedia.org/wiki/ISO_8601 this is not a valid format for dates (without time). But maybe wikipedia is incomplete. I am not suggesting to change this behaviour, although it make no sense, in my opinion. Technical Conclusion: The patch is based on the assumption, that java.sql.Date objects should be treated as date without time. Dates without time should not be changed on transfer across time zone boundaries. Therefore java.sql.Date shall be converted to a string reflecting the local meaning. In the current implementation this means, that the time zone offset has to be considered to neutralized time zone effects. This is my point of view. I hoper the majority can follow my suggestion. With best regards, Andreas ---------------------------------------------------------------- ITS Telco Services GmbH GIS Services & Solutions Telecommunications Division Dillenburger Str. 77 D-51105 Köln Tel.: +49 (0)221 820 07 00 Fax : +49 (0)221 820 07 22 Mail: i...@its-telco.de Web : http://www.its-telco.de ---------------------------------------------------------------- Sitz der Gesellschaft: Köln Amtsgericht Köln, HRB 59310 Geschäftsführer: Gunnar Haack, Ralf Petersilka, Michael Schnepf, Kai Schriewer, Ludger Schulte ---------------------------------------------------------------- Diese E-Mail enthält vertrauliche Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail ist nicht gestattet. This e-mail may contain confidential information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden. ------------------------------------------------------------------------------ _______________________________________________ GeoTools-Devel mailing list GeoTools-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel ------------------------------------------------------------------------------ _______________________________________________ GeoTools-Devel mailing list GeoTools-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel -- ==GeoServer Professional Services from the experts! Visithttp://goo.gl/it488V for more information.== Geosolutions' Winter Holidays from 24/12 to 6/1 Ing. Andrea Aime @geowolfTechnical Lead GeoSolutions S.A.S.Via Poggio alle Viti 118755054 Massarosa (LU)Italyphone: +39 0584 962313fax: +39 0584 1660272mob: +39 339 8844549 http://www.geo-solutions.ithttp://twitter.com/geosolutions_it AVVERTENZE AI SENSI DEL D.Lgs. 196/2003Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003. The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection Code).Any use not in accord with its purpose, any disclosure, reproduction, copying, distribution, or either dissemination, either whole or partial, is strictly forbidden except previous formal approval of the named addressee(s). If you are not the intended recipient, please contact immediately the sender by telephone, fax or e-mail and delete the information in this message that has been received in error. The sender does not give any warranty or accept liability as the content, accuracy or completeness of sent messages and accepts no responsibility for changes made after they were sent or for other risks which arise as a result of e-mail transmission, viruses, etc. ------------------------------------------------------- ------------------------------------------------------------------------------ _______________________________________________ GeoTools-Devel mailing list GeoTools-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel -- Ian Turton -- Andreas Watermeyer office: +49 (0)221 820 07 14 ---------------------------------------------------------------- ITS Telco Services GmbH GIS Services & Solutions Telecommunications Division Dillenburger Str. 77 D-51105 Köln Tel.: +49 (0)221 820 07 00 Fax : +49 (0)221 820 07 22 Mail: i...@its-telco.de Web : http://www.its-telco.de ---------------------------------------------------------------- Sitz der Gesellschaft: Köln Amtsgericht Köln, HRB 59310 Geschäftsführer: Gunnar Haack, Ralf Petersilka, Michael Schnepf, Kai Schriewer, Ludger Schulte ---------------------------------------------------------------- Diese E-Mail enthält vertrauliche Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail ist nicht gestattet. This e-mail may contain confidential information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden. ------------------------------------------------------------------------------ _______________________________________________ GeoTools-Devel mailing list GeoTools-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel
------------------------------------------------------------------------------
_______________________________________________ GeoTools-Devel mailing list GeoTools-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel