TIMEZONE / UTC [erledigt]

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

TIMEZONE / UTC [erledigt]

Beitrag von AUGE_OHR »

hi,

unter http://www.microsoft.com/downloads/en/d ... sh=RDMQWM8
gibt es ein Timezone Tool ... so was möchte ich für Xbase++ haben ...

unter http://www.cpearson.com/excel/TimeZoneA ... tTime.aspx habe ich nun ein VB Sample gefunden und auch jede Menge Excel "Formeln" aber nirgends eine "Tabelle"

bei http://en.wikipedia.org/wiki/Time_zone finde ich die UTC Zonen und auch eine Grafik "wo" man "Daylight saving time" ( Sommerzeit ) verwendet aber wieder keine "Tabelle"

für die "aktuelle" Workstation kann man ja mit

Code: Alles auswählen

// Zeitzone (String)
#define NLS_STIMEZONE          76
// Zeitzonenabweichung Lokalzeit zu UTC (min) incl. NLS_ITZDAYLIGHTBIAS
#define NLS_ITZBIAS            77
// zus„tzlicher Abweichung w„hrend der Sommerzeit
#define NLS_ITZDAYLIGHTBIAS    78
die Werte "abfragen", aber wie macht man es mit einer "fremden" TimeZone ?
Zuletzt geändert von AUGE_OHR am Sa, 14. Mai 2011 16:39, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: TIMEZONE / UTC

Beitrag von brandelh »

Hi,

als ich meine TimeStamp() Funktion erstellt habe (Wissensbasis) hatte ich sowas gesehen ... Wikipedia ?
Weltzeitzohnen ?
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: TIMEZONE / UTC

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben:als ich meine TimeStamp() Funktion erstellt habe (Wissensbasis) hatte ich sowas gesehen ... Wikipedia ?
Weltzeitzohnen ?
ich habe mir deine TimeStamp() Funktion angesehen und da scheinst du die "GetTimeZoneInformation" zu verwenden.

ich bin mir beim Parameter cTimeType nicht ganz klar was man da nimmt.
unter http://www.timeanddate.com/library/abbr ... timezones/ finde ich die ganzen "Abkürzungen" (Index of time zone acronyms and abbreviations)
soll man "die" verwenden als Parameter für deine TimeStamp() Funktion ?

Code: Alles auswählen

PROCEDURE MAIN

? TimeStamp()
? TimeStamp("HKT") // HongKong
? TimeStamp("KST")  // Korea ?

WAIT
RETURN
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: TIMEZONE / UTC

Beitrag von brandelh »

Hallo,

da muss ich im Quellcode nachsehen, ist schon etwas her ;-)

NEIN, der Parameter gibt nur das Format vor, dass man zurückgegeben bekommt:

// API TimeStamp in Zulu Zeit (UTC) oder local Zeit (UTC+/-Offset)
"L" lokale Zeit, also mit +/- Zeitversatz => Grundformat: 19850412T232050+0100 (lokale Zeit)
sonst => "U" Zeit des 0-Meridian => Grundformat: 19850412T232050Z (UTZ oder Zulu Zeit)

Es ist schon eine Weile her, aber eventuell kann man die Funktion so abändern,
dass sie auf die "Kürzel" reagiert.
Meine Funktion liefert immer nur den aktuellen Zeitstempel der aktuellen Zeit in der aktuellen
Zeitzohne, nur die Darstellung ist unterschiedlich.

Ich hatte auf diesen Artikel verwiesen, weil ich meine mich erinnern zu können, dass
die Verweise hierzu Infos enthalten, die nützlich sein können.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: TIMEZONE / UTC

Beitrag von brandelh »

Hi,

aber anhand der aktuellen LOKALE Zeit und dem Vergleich laut der Liste UTC+/-??? kannst du die dortige Aktuelle Zeit leicht ermitteln.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: TIMEZONE / UTC

Beitrag von AUGE_OHR »

brandelh hat geschrieben:aber anhand der aktuellen LOKALE Zeit und dem Vergleich laut der Liste UTC+/-??? kannst du die dortige Aktuelle Zeit leicht ermitteln.
ich befürchte das die UTC Zeit "nicht immer" die "Sommerzeit" berücksichtigen ( Asien ).

aber dein Source gibt mir ja schon mal Hinweise was ich noch evaluieren könnte, Danke !
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: TIMEZONE / UTC

Beitrag von AUGE_OHR »

hi,

unter http://www.activevb.de/tipps/vb6tipps/tipp0341.html habe ich eine VB Code gefunden der mich auf eine Idee brachte :
Wenn ich die "Zeitzone" manuell ändere (dblClick auf Uhrzeit ) so ändert sich auch die Uhrzeit ...

mit SetTimeZoneInformation(newTZI) kann man wohl eine neue Timezone "setzten", aber vorher sollte man die "alte" aus der Registry "auslesen"

unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones" finde ich ja alle Timezone(n) aufgelistet.

in "TzVersion" steht wohl der "aktuelle" REG_DWORD Wert 7db0000 Hex ( 131792896 ) aber den finde ich nicht in "TZI" als "binär Wert" (REG_BINARY)

wer kann mir da weiterhelfen wie ich "TzVersion" / "TZI" denn "umwandel" um es mit SetTimeZoneInformation(newTZI) zu verwenden ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: TIMEZONE / UTC

Beitrag von AUGE_OHR »

hi,

ich habe nun versucht das VB Sample nach Xbase++ zu "übersetzten".
ich "lese" aus der Registry die Werte aus in ein Array

Code: Alles auswählen

#include "DLL.CH"
PROCEDURE MAIN
    READREG()
RETURN

PROCEDURE READREG()
LOCAL cKey := "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"
LOCAL oReg := XbpReg():NEW( cKey )
LOCAL aSubkeys
LOCAL aRet     := {}
LOCAL nLen
LOCAL i
LOCAL nChoice  := 1
LOCAL aText
LOCAL cTZI

   aSubkeys := oReg:KeyList()
   nLen     := LEN(aSubkeys)
   FOR i := 1 TO nLen
      AADD(aRet,{aSubkeys[i],"","","",""})

      Morefill(aRet,cKey,aSubkeys,i)
   NEXT
   ASORT(aRet,,, {|aX,aY| aX[2] < aY[2] } )

   //
   // Eindimensionales Array
   // erzeugen
   //
   aText  := aCLONE(aRet)
   AEval( aText, {|a,i| a:= SUBSTR(a[1]+SPACE(40),1,40)+a[2] },,,.T. )

   CLS
   nChoice := AChoice( 0, 0, MAXROW(), MAXCOL(), aText )

   IF nChoice > 0
      CLS
      ? aRet[nChoice][1]
      ? aRet[nChoice][2]

*      cTZI += Bin2l( SUBSTR(aRet[nChoice][5],1,4) )
*      ? GetTZI(cTZI)
      WAIT
   ENDIF
RETURN


PROCEDURE Morefill(aRet,cKey,aSubkeys,i)
LOCAL cNewKey
LOCAL oReg
LOCAL nLen
LOCAL j
LOCAL cText


   cNewKey := cKey+"\"+TRIM(aSubkeys[i])
   oReg := XbpReg():NEW( cNewKey  )

   IF !oReg:Status()
RETURN
   ELSE
      oReg:ReadBinType("C")
      cText := oReg:Standard

      cText := oReg:GetValue( "Display")
      aRet[i][2] := ConvToOemCP(cText)

      cText := oReg:GetValue( "Dlt")
      aRet[i][3] := ConvToOemCP(cText)

      cText := oReg:GetValue( "Std")
      aRet[i][4] := ConvToOemCP(cText)

      // hm .. und nun REG_BINARY
*     oReg:ReadBinType("A")  // -> crash ... BIN2VAR() ???
      oReg:ReadBinType("C")
      cText := oReg:GetValue( "TZI" )
      aRet[i][5] := cText
   ENDIF

RETURN
soweit so gut ... in aRet[5] hab ich nun "TZI"[attachment=0]Time_Zones.JPG[/attachment]Frage : wie bekomme ich "TZI" in eine "Structur" damit die aussieht wie

Code: Alles auswählen

   local cTZI := l2bin(0)+;             // LONG   Bias;             TZI _TimeZoneInfo   4   1-  4
                 space(64)+;            // WCHAR  StandardName[32];                    64   5- 68
                 replicate(W2bin(0),8)+;// SYSTEMTIME StandardDate;                    16  69- 84
                 l2bin(0)+;             // LONG   StandardBias;                         4  85- 88
                 space(64)+;            // WCHAR  DaylightName[ 32 ];                  64  89-152
                 replicate(W2bin(0),8)+;// SYSTEMTIME DaylightDate;                    16 153-168
                 l2bin(0)               // LONG       DaylightBias;                     4 169-172
                                        // wir brauchen hiervon nur die 3 Bias !
Dateianhänge
Time_Zones.JPG
Time_Zones.JPG (86.04 KiB) 3623 mal betrachtet
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: TIMEZONE / UTC

Beitrag von AUGE_OHR »

hi,

tja hätte ich gleich Pablo gefragt :

d:\REIN\XBASE\Devcon2007\VEN01.1 Pablo Botella\Tut\TestDDEML\DDEMLTimeServer.prg

in seinem Devcon2007 Demos ist das Sample dabei ... #-o
gruss by OHR
Jimmy
Antworten