PDA

View Full Version : TimeZone



muadeep
09-07-09, 07:50
Hallo *all

wir haben hier bei uns Zeit intensive Job's, welche jetzt auch für unsere externen Firmen im Ausland benötigt werden!

Ist es möglich, bei bestimmten Usern z.B im Userprofile oder vielleicht auch in einem CL, etc. eine bestimmte Zeitzone zu hinterlegen?

Beispiel:
Job läuft für Deutschland um 01:30 (Systemzeit) => Zeit/Datum ist ok
Job läuft für Kanada um 01:30 (Systemzeit) => Zeit/Datum ist dort ja noch der vorhergehende Tag bzw. 5 o. mehr Stunden zurück
Job läuft USA um 01:30 (Systemzeit) => Zeit/Datum ist dort ja noch der vorhergehende Tag bzw. 5 o. mehr Stunden zurück

Edefauler
09-07-09, 08:29
Nur als Tipp: Eine Zeitzone kannst du beim Usrprofil in der Locale unterbringen.
Wie genau? ...keine Ahnung...

Fuerchau
09-07-09, 09:33
Dies ist zwar korrekt, hat aber keine Auswirkung auf die Steuerungswerte QTIME und QDATE oder die RPG-Funktionen TIME, %DATE und %TIME.

Hintergrund ist, dass durch die Locale eine ENVVAR "TIMZON" gesetzt wird.
Nur die C-Funktion localtime() liefert dann eine Zeitzonenzeit.
Genau ist das eigentlich:
long time() <= Liefert die GMT in Sekunden seit 1.1.1970, das ist QTIME um QUTCOFFSET verändert.
struct tm* localtime(time()) liefert dann die lokale Zeit entsprechend der ENVVAR TIMZON bzw. wenn diese fehlt wird QUTCOFFSET verwendet.

Leider ist tatsächlich nur die C-Umgebung Zeitzonensicher.

Alle Standardprogramme oder das DDS-Schlüsswort TIME liefern nur die Systemzeit.

Dein Problem kannst du also mit Standardmitteln nicht lösen.

muadeep
10-07-09, 07:18
Standardmitteln gehen nicht :-( ?!?!?

Welche anderen Möglichkeiten gibt's denn dann?

Fuerchau
10-07-09, 08:38
Hab ich das nicht beschrieben ?

C-Funktionen !

B.Hauser
10-07-09, 09:24
SQL sollte diese Informationen auch liefern (basiert ja auf C ;).

Es gibt eine special register CURRENT_TIMEZONE, mit dem die Zeitzone (als Abweichung Stunden zur UTC=Greenwich Time) ermittelt werden kann.

Birgitta

Fuerchau
10-07-09, 11:56
Stimmt, allerdings muss man diesen Wert von Current Time dann subtrahieren:

current time - int(CURRENT_TIMEZONE / 10000) hours

Wenn es denn glatte Stunden sind.

B.Hauser
10-07-09, 13:51
Stimmt, allerdings muss man diesen Wert von Current Time dann subtrahieren:

current time - int(CURRENT_TIMEZONE / 10000) hours

Wenn es denn glatte Stunden sind.

... wenn Du die UTC errechnen willst reicht es allerdings die Current_Timezone von der Current_Time abzuziehen.

Current_Time - Current_timezone

Birgitta

Fuerchau
10-07-09, 14:56
Aber:

CURRENT TIMEZONE
CURRENT_TIMEZONE
A duration of time that links local time to Universal Time Coordinated (UTC) using the formula: local time - CURRENT TIMEZONE = UTCIt is taken from the system value QUTCOFFSET.

Eine User-lokale Zeit hat man damit immer noch nicht.
Hier hilft doch wieder nur eine C-Funktion mit einer Job-ENVVAR: TZ.


Siehe auch:
TZ Variable - The GNU C Library (http://www.gnu.org/s/libc/manual/html_node/TZ-Variable.html)