[Geoserver-users] Wrong time values for Oracle DATE columns

Hi,

I just discovered that GeoServer is rounding Oracle DATE attribute values down to zero or twelve hours when I’m publishing data from a ‘Oracle NG (OCI)’ data store. Examples:

1.1.2024 17:34:12 becomes 1.1.2024 12:00:00 or

1.1.2024 03:17:05 becomes 1.1.2024 00:00:00

This happens only when I’m publishing a complete table, not when I’m defining an SQL view. Directly after creating the new layer, the column type is set to the Java data type ‘Date’. Comparing to an SQL view I saw that there the column is defined as ‘Timestamp’. But also changing the data type using the ‘Customize attributes’ function to ‘Timestamp’ or ‘Time’ doesn’t help.

This happend in GeoServer 2.23.0 and also 2.25.0.

Does anybody have an idea what’s going on here.

Thank you and best regards
Daniel

That’s the expected behaviour - if you need to preserve the time of the date make the column a timestamp (preferably with timezone) rather than a data which only stores the year, month and day.

Ian

···

Ian Turton

Hi Ian,

what exactly are you meaning with ‘make the column a timestamp’? Because in GeoServer I already tried to change the data type to ‘Timestamp’ and that doesn’t change anything. And in the Oracle database the DATE type also stores time values. From the documentation: “The fields that apply to all Oracle Database datetime and interval data types are: YEAR MONTH DAY HOUR MINUTE SECOND.” (https://docs.oracle.com/en/database/oracle/oracle-database/23/nlspg/datetime-data-types-and-time-zone-support.html#GUID-789689BF-5682-4577-8ADE-8105C652CBB7)

So would it be necessary to change the data type inside the database? And why are values on the afternoon or evening set to noon instead of midnight if only year, month and day are preserved?

Thank you

Daniel

···

From: Ian Turton <ijturton@…84…>
Sent: Donnerstag, 18. April 2024 12:12
To: Calliess Daniel Ing. <Daniel.Calliess@…8499…>
Cc: geoserver-users@lists.sourceforge.net
Subject: [EXTERN!]: Re: [Geoserver-users] Wrong time values for Oracle DATE columns

That’s the expected behaviour - if you need to preserve the time of the date make the column a timestamp (preferably with timezone) rather than a data which only stores the year, month and day.

Ian

On Thu, 18 Apr 2024 at 10:56, Calliess Daniel Ing. <Daniel.Calliess@…8565…> wrote:

Hi,

I just discovered that GeoServer is rounding Oracle DATE attribute values down to zero or twelve hours when I’m publishing data from a ‘Oracle NG (OCI)’ data store. Examples:

1.1.2024 17:34:12 becomes 1.1.2024 12:00:00 or

1.1.2024 03:17:05 becomes 1.1.2024 00:00:00

This happens only when I’m publishing a complete table, not when I’m defining an SQL view. Directly after creating the new layer, the column type is set to the Java data type ‘Date’. Comparing to an SQL view I saw that there the column is defined as ‘Timestamp’. But also changing the data type using the ‘Customize attributes’ function to ‘Timestamp’ or ‘Time’ doesn’t help.

This happend in GeoServer 2.23.0 and also 2.25.0.

Does anybody have an idea what’s going on here.

Thank you and best regards
Daniel


Geoserver-users mailing list

Please make sure you read the following two resources before posting to this list:

If you want to request a feature or an improvement, also see this: https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer

Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Ian Turton

Hi Daniel,
the Oracle datastore tests seem to confirm what Ian says, they create a table to store a date, a timestamp, and a time column (some databases
can handle the three types as separate) and the syntax is the following:

CREATE TABLE DATES (D DATE, DT TIMESTAMP, T TIMESTAMP)

and then they check the mappings work, overriding the test because Oracle has no notion of “time” alone:

/*

  • Oracle has no concept of just “Time”. Sigh…
  • @see org.geotools.jdbc.JDBCDateTest#testMappings()
    */
    @Override
    public void testMappings() throws Exception {
    SimpleFeatureType ft = dataStore.getSchema(tname(“dates”));

assertEquals(Date.class, ft.getDescriptor(aname(“d”)).getType().getBinding());
assertEquals(Timestamp.class, ft.getDescriptor(aname(“dt”)).getType().getBinding());
assertEquals(Timestamp.class, ft.getDescriptor(aname(“t”)).getType().getBinding());
}

So yes, if you want GeoServer to handle date+time, use the TIMESTAMP column type.

···

Regards,

Andrea Aime

==
GeoServer Professional Services from the experts!

Visit http://bit.ly/gs-services-us for more information.

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions Group
phone: +39 0584 962313

fax: +39 0584 1660272

mob: +39 339 8844549

https://www.geosolutionsgroup.com/

http://twitter.com/geosolutions_it


Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si precisa che ogni circostanza inerente alla presente email (il suo contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le sarei comunque grato se potesse darmene notizia.

This email is intended only for the person or entity to which it is addressed and may contain information that is privileged, confidential or otherwise protected from disclosure. We remind that - as provided by European Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or the information herein by anyone other than the intended recipient is prohibited. If you have received this email by mistake, please notify us immediately by telephone or e-mail

Op 18-04-2024 om 11:39 schreef Calliess Daniel Ing.:

Hi,

I just discovered that GeoServer is rounding Oracle DATE attribute values down to zero or twelve hours when I'm publishing data from a 'Oracle NG (OCI)' data store. Examples:

1.1.2024 17:34:12 becomes 1.1.2024 12:00:00 or

1.1.2024 03:17:05 becomes 1.1.2024 00:00:00

You might want to look into and experiment with the "oracle.jdbc.J2EE13Compliant" connection option of the Oracle JDBC driver

Hi Mark,

thank you for this suggestion, but this parameter doesn't change the behaviour. In case the documentation at https://docs.oracle.com/en/database/oracle/oracle-database/23/jjdbc/accessing-and-manipulating-Oracle-data.html does apply in this situation, J2EE13Compliant would only change behaviour for columns already defined as TIMESTAMP.

Regards
Daniel

-----Original Message-----
From: mark <mc.prins@anonymised.com>
Sent: Sonntag, 21. April 2024 22:15
To: geoserver-users@lists.sourceforge.net
Subject: [EXTERN!]: Re: [Geoserver-users] Wrong time values for Oracle DATE columns

Op 18-04-2024 om 11:39 schreef Calliess Daniel Ing.:

Hi,

I just discovered that GeoServer is rounding Oracle DATE attribute
values down to zero or twelve hours when I'm publishing data from a
'Oracle NG (OCI)' data store. Examples:

1.1.2024 17:34:12 becomes 1.1.2024 12:00:00 or

1.1.2024 03:17:05 becomes 1.1.2024 00:00:00

You might want to look into and experiment with the
"oracle.jdbc.J2EE13Compliant" connection option of the Oracle JDBC driver

_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this list:
- Earning your support instead of buying it, but Ian Turton: http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer

Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users