I'm getting the time zone offset of a TIMESTAMP column using oracle::occi::Timestamp::getTimeZoneOffset method, but got the same results when retrieving a timestamp value in summer time (2020-09-30) than when retrieving other value which is in standard time (2020-03-01).
The environment is as follow:
- 
Oracle XE 11G R2
 - 
Time Zone =
Europe/Madrid(UTC offset: STD=+01:00; DST=+02:00) - 
Temp table with one row and two columns:
CREATE TABLE TEST_TZ_OFFSET AS SELECT TIMESTAMP '2020-09-30 00:00:00.000000' AS DST, TIMESTAMP '2020-03-01 00:00:00.000000' AS STD FROM DUAL - 
Oracle Instant Client for Linux x86-64 Version 12.2.0.1.0
 
When the column in DST is fetched it works as expected (7200 seconds = +02:00), but when STD column is fetched it has the same offset as in DST when it is suppose to be 3600 seconds (+01:00)
long getGMTOffset(oracle::occi::Connection *conn, const std::string &columnName) {
    oracle::occi::Timestamp timestamp;
    oracle::occi::Statement *stmt;
    int tzhour = 0, tzminute = 0;
    try {
        std::string query = "SELECT " + columnName + " FROM TEST_TZ_OFFSET";
        stmt = conn->createStatement();
        stmt->setSQL(query);
        oracle::occi::ResultSet *rs = stmt->executeQuery();
        if (rs->next()) {
            timestamp = rs->getTimestamp(1);
        }
        
        stmt->closeResultSet(rs);
        conn->terminateStatement(stmt);
    } catch (const std::exception &e) {
        std::cerr << e.what() << "\n";
        conn->terminateStatement(stmt);
    }
    timestamp.getTimeZoneOffset(tzhour, tzminute);
    return (tzhour * 60 + tzminute) * 60;
}
std::cout << "GMT Offset of STD column = " << getGMTOffset(connection, "STD") << "\n";
std::cout << "GMT Offset of DST column = " << getGMTOffset(connection, "DST") << "\n";
Output:
GMT Offset of STD column = 7200
GMT Offset of DST column = 7200
Is this the expected behaviour?
Aucun commentaire:
Enregistrer un commentaire