Kezdőoldal » Számítástechnika » Programozás » Oracle dátumból időzónás...

Oracle dátumból időzónás dátum konvertálása?

Figyelt kérdés

Egy olyan problémát szeretnék megoldani, hogy egy adattáblát úgy kellene update-elni, hogy a korábban használt date típust "timestamp with timezone" típusúra kellene lecserélni, de úgy, hogy múltbéli dátumok is helyes időzóna információt kapjanak. A sima cast-tal az a gond, hogy ha most pl. (UTC)+2 óra az időzóna, mert Közép-Európában vagyunk és nyári időszámítás van, akkor a téli adatokhoz is +2 órát ad hozzá, ami nem helyes.Azt sikerült kikísérleteznem, hogy ha már egyszer ismerem az időzónát Europe/Budapest formátumban, akkor már az Oracle adott dátumra meg tudja mondani, hogy +1 vagy +2 órát kell-e hozzáadni. Sajnos a dbtimezone és a sessiontimezone nem biztos, hogy ebben a formátumban tartalmazza az időzónát, hanem +02:00-ként. Ezt dinamikusan átírni az adatbázisban nem játszik, mert több, a világ több pontján levő ügyféllel is számolni kell. A timestamp-hez kapcsolódó express metódus nem segít, unknow-ot ad vissza, ugyanis nem mappelhető át egyértelműen egy adott nevesített időzónához. Neten láttam, hogy megoldható lenne java stored procedure-ral(ha már a pl/sql nem tudja), hogy kinyerjük az operációs rendszer timezoneját, az Oracle timezone-ja helyett.

Sajnos az adatbázisrendszer az Oracle 12c, ami még régi JRE-t tartalmaz, 1.6-os Javát, ha jól látom. Így bár az 1.8-as Java már elég jól kezeli az időzónákat (és frissített tzmappings táblát használ), ez nem jön számításba (Netbeans-ből használva szépen kidobja az getID, hogy mondjuk Europe/Berlin, de ha sikerül is betölteni Oracle-be, ott már nem jelenik meg a helyes eredmény. SQL developerben még igen, de sqlplus-ban nem, márpedig az update scriptek onnan lesznek futtatva.)

Próbáltam Jodatime tool-t használni, abból a legfrissebbet 1.6-os Javával fordítva. Az elvileg az új mappelő táblát tartalmazza, de valamiért sqlplusban olyankor is csak +02:00-t tudok kinyerni belőle. Stackoverflow-n azt olvastam, hogy a JodaTime hogyha nem tudja előkaparni az user.timezone variable szerinti (OS) időzónát, akkor a java.utils-hoz fordul, ami ugye nem jó, ha pedig az sem sikerül, akkor pedig UTC időt vesz. De nem teljesen világos, hogy miért ne tudná megszerezni az OS idejét (akár a user.timezone-ban eltároltat, akár venni az oprendszer saját toolját és azt átfordítani, ha kell). Talán valami jogosultság problémába ütközne?Valakinek valami megoldás tippje esetleg?



2018. jún. 22. 00:54
 1/1 anonim ***** válasza:
54%
Tyű.
2018. jún. 22. 08:14
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!