GMT / UTC / DayLight (Sommerzeit) ... [erledigt]

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

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

GMT / UTC / DayLight (Sommerzeit) ... [erledigt]

Beitrag von AUGE_OHR »

hi,

angenommen es wäre jetzt 12:00, da aber Sommerzeit effektiv 11:00
nun liegen wir ja in GMT +01:00 ... aber auch da gilt(?) die Sommerzeit ... also habe wir 10:00 oder doch 11:00 Uhr ?
und was ist dann UTC ?
TZone0.JPG
TZone0.JPG (32.17 KiB) 5548 mal betrachtet
würde die Zeiten "so" stimmen ?

nun habe ich ja +GMT und -GMT Zonen
TZone2.JPG
TZone2.JPG (36.66 KiB) 5548 mal betrachtet
während es mit New York GMT -05:00 stimmt ist bei Seoul GMT +09:00 etwas falsch ... aber was ... :-k

effektive ist Seoul + 7Std "vor raus" ... aber wie komme ich dahin ?

Bias -540 sind ja 9 Std und DayLightBias ist -60 = 1 Std ( kann nicht mehr sein als -60 )
und die "Formel" lautet
// Standard Time = GMT - Bias - StandardBias
// Daylight Saving Time = GMT - Bias - DaylightBias
da 540 -60 = 8 Std. sind "müsste" in GMT auch noch DayLightBias = -60 sein damit ich auf 7 Std. komme.

bei New York habe ich effektive -6 Std.
Bias 300 = 5 Std und DayLightBias = -60 = 1 Std ... wenn aber GMT mit DayLightBias = -60 arbeitet komme ich nicht auf 6 Std ... :banghead:

also was läuft bei diesem Code verkehrt, wobei StandardBias immer = 0 ist

Code: Alles auswählen

   nBias         := ::aWorkZone[I_ZONE0][I_Bias        ]
   nStandardBias := ::aWorkZone[I_ZONE0][I_StandardBias]
   nDaylightBias := ::aWorkZone[I_ZONE0][I_DaylightBias]

   // Standard Time = GMT - Bias - StandardBias
   //
   // die Werte sind negative also "+"
   //
   ::nGMT := nTime + nBias + nStandardBias

// nur debug  
   nGMT := ::nGMT
   cGMT := XF_SEC2HMS(::nGMT)
ALTD()

   // Daylight Saving Time = GMT - Bias - DaylightBias
   //
   // die Werte sind negative also "+"
   //
   ::nGMT := nTime + nBias + nDaylightBias

// nur debug  
   nRealTime := ::nGMT - nDaylightBias // negative - -> + 1 Std
   nDiff     := nDaylightBias
   cUTC := XF_SEC2HMS(nRealTime)
ALTD()


...


   nBias         := ::aWorkZone[I_ZONE2][I_Bias        ]
   nStandardBias := ::aWorkZone[I_ZONE2][I_StandardBias]
   nDaylightBias := ::aWorkZone[I_ZONE2][I_DaylightBias]

   nSec    := ::nGMT
   IF nBias > 0                                  // New York -5 GMT effektive -6 Std.
      nSec -= nBias
*     nSec -= nDiff
      IF nDaylightBias <> 0
         // Daylight Saving Time = GMT - Bias - DaylightBias
         nSec -= nDaylightBias
      ELSE
         // Standard Time = GMT - Bias - StandardBias
         nSec -= nStandardBias
      ENDIF
   ELSE                                          // Seoul    -9 GMT effektive +7 Std.
      nSec -= nBias
*     nSec += nDiff
      IF nDaylightBias <> 0
         // Daylight Saving Time = GMT - Bias - DaylightBias
         nSec -= nDaylightBias
      ELSE
         // Standard Time = GMT - Bias - StandardBias
         nSec -= nStandardBias
      ENDIF
   ENDIF
   IF nSec < 0
      nSec += 86400
   ENDIF
   IF nSec >= 86400
      nSec -= 86400
   ENDIF
   cString := XF_SEC2HMS( nSec )
   ::oTimeRemote:setCaption( cString )
ALTD()
wer hat eine Idee :idea:
Zuletzt geändert von AUGE_OHR am Di, 17. Mai 2011 6:23, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: GMT / UTC / DayLight (Sommerzeit) ...

Beitrag von brandelh »

Hi,

hier kannst du nachlesen, wer wann wie und wo grundsätzlich welche Zeit hat ;-)

:arrow: http://de.wikipedia.org/wiki/Zeitzone

PS: bei Win7 und Vista kann man mehrere Uhren gleichzeitig anzeigen lassen.

Grundsätzlich sollte man nur für UTZ+0 eine 0 für BIAS erhalten ...
Zuletzt geändert von brandelh am Mo, 16. Mai 2011 11:25, insgesamt 1-mal geändert.
Grund: URL wurde nicht angegeben.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: GMT / UTC / DayLight (Sommerzeit) ...

Beitrag von brandelh »

Hallo Jimmy,

die Rückgabewerte von der Funktion GetTimeZoneInformation() beziehen sich auf

LOKALE Zeit - (Bias + StandardBias + DaylightBias ) => UTC die Zeitzonenangabe UTC+9 ist genau gegengesetzt.

UTC Standard = 14.00
UTC+1 Standard = 15.00 (wir haben schon 15 Uhr, London erst 14.00)
UTC+9 Standard = 23.00 (Korea hat schon 23 Uhr, London erst 15.00)

Ich denke, du musst zuerst auf UTC Standard rechnen und dann daraus die andere Zeit berücksichtigen.
Am Ende noch Sommer- oder Standardzeit berücksichtigen.
Beide Orte haben meist unterschiedliche Sommer/Standartzeiteinstellungen.

PS: ich kenne kein Land, das StandardBias # 0 hat, es scheint aber möglich zu sein.
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: GMT / UTC / DayLight (Sommerzeit) ...

Beitrag von AUGE_OHR »

brandelh hat geschrieben:die Rückgabewerte von der Funktion GetTimeZoneInformation() beziehen sich auf
LOKALE Zeit - (Bias + StandardBias + DaylightBias ) => UTC die Zeitzonenangabe UTC+9 ist genau gegengesetzt.
ok ...
brandelh hat geschrieben:UTC Standard = 14.00
UTC+1 Standard = 15.00 (wir haben schon 15 Uhr, London erst 14.00)
UTC+9 Standard = 23.00 (Korea hat schon 23 Uhr, London erst 15.00)
aber da hast du doch das "Problem" den 23 -15 sind doch 8 Std ... es sind aber nur 7 Std. z.Z.
brandelh hat geschrieben:Ich denke, du musst zuerst auf UTC Standard rechnen und dann daraus die andere Zeit berücksichtigen.
hm ...
angenommen alle hätten "Normal" Zeit -> DaylightBias = 0 dann wäre es "nur" der UTC Unterschied
UTC+1 - UTC-5 (New York) -> 6 Std ... OK
UTC+9 - UTC+1 = 8 Std ... wieder nicht 7 Std ... :banghead:
brandelh hat geschrieben:Am Ende noch Sommer- oder Standardzeit berücksichtigen.
Beide Orte haben meist unterschiedliche Sommer/Standartzeiteinstellungen.
soweit bin ich noch gar nicht gekommen.
unter http://www.windowsitpro.com/article/reg ... -registry-
werden die Bytes ja genau beschrieben ... das sollte man hin benommen ...
brandelh hat geschrieben:PS: ich kenne kein Land, das StandardBias # 0 hat, es scheint aber möglich zu sein.
ich habe noch keins gefunden.
brandelh hat geschrieben:PS: bei Win7 und Vista kann man mehrere Uhren gleichzeitig anzeigen lassen.
YUP ... aber leider hat sich da in der Registry unter
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation"
auch was geändet ... der Wert für "StandardName" führt zu einer "@tzres.DLL,-332" ... :(

ok es gibt unter Win7 jetzt "TimeZoneKeyName" aber der stimmt nicht mit "Std" oder "Dlt"
sondern bezieht sich auf die "o:KeyList" Element beim "auslesen" der Registry.

p.s. Win7 zeigt mir Seoul mit +7 Std an und NY mit -6 Std
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: GMT / UTC / DayLight (Sommerzeit) ...

Beitrag von AUGE_OHR »

hi,

nun habe ich mich in die "Tiefen" begeben und festgestellt das M$ wohl selbst vor diesem ( unlösbaren) Problem stand ?

es gib aber die Function SystemTimeToTzSpecificLocalTime die wohl das macht was ich möchte
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

und hier wohl der Code wie man es einsetzt

Code: Alles auswählen

        /// <summary>
        /// Convert a time interpreted as UTC to a time in this time zone.
        /// </summary>
        /// <param name="utc">The UTC time to convert.</param>
        /// <returns>The corresponding local time in this zone.</returns>
        public DateTime FromUniversalTime( DateTime utc )
        {
            // Convert to SYSTEMTIME
            SYSTEMTIME stUTC = DateTimeToSystemTime( utc );

            // Set up the TIME_ZONE_INFORMATION

            TIME_ZONE_INFORMATION tziNative = TziNative();

            SYSTEMTIME stLocal;

            NativeMethods.SystemTimeToTzSpecificLocalTime( ref tziNative, ref stUTC, out stLocal );

            // Convert back to DateTime
            return SystemTimeToDateTime( ref stLocal );
        }
und hier nun die Umsetzung mit Ot4Xb und Pablos Devcon 2007 Beispiel
Real_TimeZone.JPG
Real_TimeZone.JPG (34.27 KiB) 5504 mal betrachtet
Nachtrag : Attachment geändert. benötigt nur ot4xb keine xbtools mehr.
Parameter : cCity1, cCity2 -> Städtenamen im GMT String wie "berlin" oder "new york"
PBZONE.ZIP
benötigt ot4xb - build 001.005.013.008
(141.12 KiB) 263-mal heruntergeladen
Zuletzt geändert von AUGE_OHR am Mi, 18. Mai 2011 4:37, insgesamt 2-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: GMT / UTC / DayLight (Sommerzeit) ...

Beitrag von brandelh »

AUGE_OHR hat geschrieben: UTC+1 - UTC-5 (New York) -> 6 Std ... OK
UTC+9 - UTC+1 = 8 Std ... wieder nicht 7 Std ... :banghead:
Hi,
wenn 8 Zeitzonen zwischen uns liegen UND die Sommerzeiteinstellungen gleich sind, dann müssten eigentlich 8 Stunden richtig sein.
Kann es sein, dass Seoul KEINE Sommerzeit kennt ? Dann wäre nämlich:

(UTC+9+0) - (UTC+1+1) => 7 Stunden ?

Auf jeden Fall ist aber die von dir gefundene Funktion einfacher zu bedienen ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: GMT / UTC / DayLight (Sommerzeit) ... [erledigt]

Beitrag von brandelh »

Hi,

und laut dem Wikipedia Artikel hat Korea keinen *, somit auch keine Sommerzeit !
Da jedes Land selbst entscheidet ob, wann und wie es die Sommerzeit umsetzt,
ist diese Windows Berechnungsformel ein Segen ... wenn denn die hinterlegten Infos richtig sind ;-)
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: GMT / UTC / DayLight (Sommerzeit) ... [erledigt]

Beitrag von AUGE_OHR »

brandelh hat geschrieben:und laut dem Wikipedia Artikel hat Korea keinen *, somit auch keine Sommerzeit !
:shock: du hast Recht ... ich war ja noch nicht bei der "Daylight Berechnung" angekommen.
nun sehe ich das bei "TZI" dort nur "00000000000" steht #-o

egal mit SystemTimeToTzSpecificLocalTime funktioniert es jedenfalls und hat noch einen Vorteil :
wenn jemand "Daylight" manuell "ausgeschaltet" hätte würde es ja auch "falsche" Zeiten produzieren.

vielleicht fragt sich jemand "warum" ich das ganze mache ?

wenn man seine Application nur "local" nutzt fällt es weniger auf, aber wenn mehrere aus verschiedenen Zeitzonen
auf die selbe Datenbank arbeiten würden die "Zeiten" nicht stimmen.
also müssen alle sich "einigen" auf eine Zeit GMT / UTC 0
gruss by OHR
Jimmy
Antworten