Deutsch
Forum

Zeitzone auslesen ?

 
Besteht die Möglichkeit, den String in der Windows-Zeitzone auszulesen ?
In diesem Fall: "Amsterdam, Berlin, Bern usw..." - siehe Bild
Wenn ja, kleine Hilfe wäre nett

93 kB
Hochgeladen:22.09.2008
Ladeanzahl115
Herunterladen
 
22.09.2008  
 




Gerhard
Praher
Hallo Horst,

ich habe dazu ein VB-Beispiel gefunden.
Vielleicht hilft es dir: [...] 

Liebe Grüße
Gerhard
 
Windows XP Pro, SP3
Jetzt: XProfan 11
Was ich liebe sind 3 "F": meine Familie, meine Firma, meine Freizeit.
22.09.2008  
 



@Gerhard

Das sind für mich leider "unerforschte Welten"
Trotzdem Danke
 
22.09.2008  
 




Gerhard
Praher
Hallo Horst,

wenn ich das Beispiel mal interpretieren darf:
Interpretieren deshalb, weil ich nicht weiss wie man es in XProfan umsetzt.

Es gibt also 2 Typen-Deklarationen - ich denke Typdeklarationen gibt es in XPorfan.
Dann wird die Funktion "GetTimeZoneInformation" von der "Kernel32.dll" hergenommen - auch das dürfte in XProfan möglich sein.
Im "Sub_Beispiel()" ist nur jener Teil interessant wo die Zeilen mit "Debug.Print" beginnen - also mit der Ausgabe der Daten.
In jeder dieser Zeilen findet eine Formatierung der Ausgabe statt - teilweise mit dem direkten Aufruf einer Funktion, die
die entsprechenden Werte liefert.
Die einzelnen Funktionen sind im Anschluss zu sehen (jeweils zwischen "Function .....()" und "End Function").

Was in den einzelnen Funktionen passiert werde ich jetzt nicht genau beschreiben, aber vielleicht hilft dir
der Hinweis auf die Kernel32.dll schon weiter.

Gruß Gerhard
 
Windows XP Pro, SP3
Jetzt: XProfan 11
Was ich liebe sind 3 "F": meine Familie, meine Firma, meine Freizeit.
22.09.2008  
 




Jörg
Sellmeyer
Damit sollte Dir erstmal geholfen sein.
KompilierenMarkierenSeparieren
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
22.09.2008  
 



Läuft sogar mit XP-Script (der Ausführen-Button)!
 
22.09.2008  
 



@Grossen Dank - Jörg

Die DEF hatte ich schon, nur für das "Drumherum" hätte ich noch einige Zeit gebraucht !
 
22.09.2008  
 




Jörg
Sellmeyer
Ist aber bestimmt noch nicht korrekt. Basiert hierauf:



typedef struct _TIME_ZONE_INFORMATION { // tzi
LONG Bias;
WCHAR StandardName[ 32 ];
SYSTEMTIME StandardDate;
LONG StandardBias;
WCHAR DaylightName[ 32 ];
SYSTEMTIME DaylightDate;
LONG DaylightBias;
} TIME_ZONE_INFORMATION;


Diese WCHAR müssen evtl. anders eingebaut werde und, wie schon erwähnt, die Strukturen fehlen. Aber es funktioniert erstmal. Allerdings gibt es Westeuropäische Normalzeit aus. Müßte aber eigentlich Sommerzeit ausspucken. Kann man aber zur Not durch den Rückgabewert der Funktion ermitteln (siehe Code oben)
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
22.09.2008  
 




Gerhard
Praher
Alle verfügbaren Zeitzonen findest du auch in der Registry.

Und zwar unter:

HKEY_LOCAL_MACHINESoftwareMircorsoftWindows NTCurrentVersionTime Zones

Gruß
Gerhard
 
Windows XP Pro, SP3
Jetzt: XProfan 11
Was ich liebe sind 3 "F": meine Familie, meine Firma, meine Freizeit.
22.09.2008  
 




Dieter
Zornow
So wird auch die Sommerzeit angezeigt, sie steht in Daylightname, aber ich glaube nur, wenn der User automatische Zeitumstellung abgehakt hat. Bei Daylight Datum bin ich mir nicht sicher welches Datum eingefügt werden muss. Ich habe mal den Beginn der Sommerzeit eingefügt
KompilierenMarkierenSeparieren
def GetTimeZoneInformation(1) !"KERNEL32", "GetTimeZoneInformation"
def GetSystemTime(1) ! "Kernel32","GetSystemTime"
struct TIME_ZONE_INFORMATION = Bias&,
StandardName$(63),
StandardDate#(16),
StandardBias&,
DaylightName$(63),
DaylightDate#(16),
DaylightBias&
declare TimeZone#,systime#
dim systime#,16
dim TimeZone#, TIME_ZONE_INFORMATION
clear timezone#
cls
GetSystemTime(systime#)
timezone#.StandardDate# =
WORD(systime#,0),
WORD(systime#,2),
WORD(systime#,4),
WORD(systime#,6),
WORD(systime#,8),
WORD(systime#,10),
WORD(systime#,12),
WORD(systime#,14)
timezone#.DaylightDate#  =
2008,
3,
0,
30,
2,
0,
0,
0
Print GetTimeZoneInformation(TimeZone#)

with TimeZone#

    print .Bias&
    print .StandardName$
    Print Translate$(Char$(TimeZone#,4,63),"z","")
    print .StandardDate#
    print .StandardBias&
    print .DaylightName$
    print Translate$(Char$(TimeZone#,87,63),"z","")
    print .DaylightDate#
    print .DaylightBias&

endwith

dispose TimeZone#,systime#
waitinput
end
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
22.09.2008  
 



@Dieter + Jörg

Danke an Beide

Mir ging es in erster Linie um:

.DaylightBias&
Translate$(Char$(TimeZone#,87,63),"z","")

...und das habe ich jetzt
 
22.09.2008  
 




RGH
... und hier die direkte Übersetzung des VisualBasic-Codes nach XProfan. Da XProfan (noch) etwas sparsam mit eingebauten Datumsroutinen ist, habe ich einige Hilfsfunktiionen hinzugefügt und vier Zeilen Hauptprogramm die die Prozedur Beispiel() aufrufen.

Achtung: Der Code ist wegen der verschachtelten Strukturen erst ab XProfan 11 lauffähig! Er zeigt aber sehr schön, wie Strukturen iun Strukturen zu verwenden sind. (Wie es vor XProfan 11ging, zeigen ja die Beiträge der Vorposter.)
KompilierenMarkierenSeparieren
// -------------------------------------------------------------------------------------
// Dieser Codeausschnitt ermittelt verschiedene Zeitzoneninformationen und bedient sich
// dabei des Win32-API. Folgende Funktionen stehen zur Verfügung:
// -------------------------------------------------------------------------------------
// Funktion:               Beschreibung:
// -------------------------------------------------------------------------------------
// DaylightSavingExists    Ermittelt, ob die Zeitzone (des Systems) eine Sommerzeit hat
// DaylightSaving          Ermittelt, ob Sommerzeit besteht
// DaylightBias            Ermittelt die Sommerzeit-Zeitverschiebung gegenüber GMT-Uhrzeit in Minuten
// StandardBias            Ermittelt die die Standardzeit-Zeitverschiebung gegenüber GMT-Uhrzeit in Minuten
// CurrentBias             Ermittelt die aktuelle Zeitverschiebung gegenüber GMT-Uhrzeit in Minuten
// DaylightName            Ermittelt den Klartextnamen der Sommerzeit-Zeitzone
// StandardName            Ermittelt den Klartextnamen der Standardzeit-Zeitzone
// GMTTime                 Ermittelt die aktuelle GMT-Uhrzeit (inkl. Datum)
// FirstDateDaylight       Ermittelt das Startdatum der Sommerzeit
// FirstDateStandard       Ermittelt das Startdatum der Standardzeit
// -------------------------------------------------------------------------------------
Def &TIME_ZONE_ID_DAYLIGHT 2
Struct SYSTEMTIME =
wYear%,
wMonth%,
wDayOfWeek%,
wDay%,
wHour%,
wMinute%,
wSecond%,
wMilliseconds%
Struct TIME_ZONE_INFORMATION =
Bias&,                     Basis-Zeitverschiebung in Minuten
StandardName#(64),         Name der Normalzeit-Zeitzone
StandardDate!SYSTEMTIME,   Beginn der Standardzeit
StandardBias&,             Zusätzliche Zeitverschiebung der Standardzeit
DaylightName#(64),         Name der Sommerzeit-Zeitzone
DaylightDate!SYSTEMTIME,   Beginn der Sommerzeit
DaylightBias&               Zusätzliche Zeitverschiebung der Sommerzeit
Def GetTimeZoneInformation(1) !"kernel32", "GetTimeZoneInformation"
--------------- Datum-Hilfsfunktionen, die es in XProfan nicht gibt----------------------------

Proc DTFormat

    gibt den Datumsteil von Data# als String zurück
    Parameters Data#
    Return Format$("00",Data#.wDay%)+"."+Format$("00",Data#.wMonth%)+"."+Format$("00",Data#.wYear%)+", "
    + Format$("00",Data#.wHour%)+":"+Format$("00",Data#.wMinute%)+":"+Format$("00",Data#.wSecond%)+" Uhr"

EndProc

Proc WeekDay

    ermittelt den Wochentag des Datums
    Parameters Year%, Month%, Day%

    If (Month% < 3)

        Month% = Month% + 12
        Year% = Year% - 1

    EndIf

    Return (Day% + Int((13 * Month% - 27) / 5) + Year% + Int(Year% / 4) - Int(Year% / 100) + Int(Year% / 400)) MOD 7

EndProc

Proc LastDay

    Ermittelt den letzten Tag des Monats im angegebenen Jahr
    Parameters Year%, Month%
    Declare Last%

    Select Month%

        CaseOf 1,3,5,7,8,10,12

        Last% = 31

        CaseOf 2

        Last% = 28 + ((Year% mod 4) = 0) - ((Year% mod 100) = 0) + ((Year% mod 400) = 0)
        OtherWise
        Last% = 30

    EndSelect

    Return Last%

EndProc

Proc DateAddMinutes

    Fügt dem DatumZeit-Objekt Date# die Minuten hinzu bzw. zieht sie ab
    Parameters Data#, Minutes%

    With Data#

        .wMinute% = .wMinute% + Minutes% mod 60
        .wHour% = .wHour% + Minutes%  60

        if .wHour% > 23

            .wHour% = .wHour% - 24
            .wDay% = .wDay% + 1

        endif

        if .wDay% > LastDay(.wYear%,.wMonth%)

            .wDay% = .wDay% - LastDay(.wYear%,.wMonth%)
            .wMonth% = .wMonth% + 1

        endif

        if .wMonth% > 12

            .wMonth% = .wMonth% - 12
            .wYear% = .wYear% + 1

        endif

        if .wHour% < 0

            .wHour% = .wHour% + 24
            .wDay% = .wDay% - 1

        endif

        if .wDay% < 1

            .wMonth% = .wMonth% - 1
            .wDay% = .wDay% + LastDay(.wYear%,.wMonth%)

        endif

        if .wMonth% < 1

            .wMonth% = .wMonth% + 12
            .wYear% = .wYear% - 1

        endif

    EndWith

    Return Data#

EndProc

-----------------------------------------------------------------------------------------

PROC Beispiel

    Print "Aktuelle Zeit"
    Print "-------------"
    Print "Aktuelle Lokalzeit: "; Date$(0); ", "; Time$(0); ":"; Left$(Time$(1),2); " Uhr"
    Print "Aktuelle GMT-Zeit: "; DTFormat(GMTTime())
    Print "Sommerzeit: "; If(DaylightSaving(), "Ja", "Nein")
    Print
    Print "Standardzeit"
    Print "------------"
    Print "Name der Standardzeit: "; StandardName()
    Print "Beginn der Standardzeit: "; FirstDateStandard(0)
    Print "Zeitverschiebung: "; "GMT" + If(StandardBias() < 0, "", "+") + Str$(Int(StandardBias())) + " Minuten"
    Print
    Print "Sommerzeit"
    Print "----------"

    If DaylightSavingExists()

        Print "Name der Sommerzeit: "; DaylightName()
        Print "Beginn der Sommerzeit: "; FirstDateDaylight(0)
        Print "Zeitverschiebung: "; "GMT" + If(DaylightBias() < 0, "", "+") + Str$(Int(DaylightBias())) + " Minuten"

    Else

        Print "Zeitzone hat keine Sommerzeit!"

    EndIf

EndProc

Proc DaylightSavingExists

    // Gibt zurück, ob die Zeitzone eine Sommerzeit hat.
    Var udtTZI# = New(TIME_ZONE_INFORMATION)
    GetTimeZoneInformation(udtTZI#)
    Return (udtTZI#.DaylightDate!wMonth% <> 0)

EndProc

Proc DaylightSaving

    // Gibt zurück, ob Sommerzeit besteht.
    Var udtTZI# = New(TIME_ZONE_INFORMATION)
    Var RetVal& = GetTimeZoneInformation(udtTZI#)
    Return (RetVal& = &TIME_ZONE_ID_DAYLIGHT)

EndProc

Proc StandardBias

    // Gibt die Standardzeit-Zeitverschiebung
    // gegenüber GMT-Uhrzeit in Minuten zurück.
    Var udtTZI# = New(TIME_ZONE_INFORMATION)
    GetTimeZoneInformation(udtTZI#)
    Return -(udtTZI#.Bias& + udtTZI#.StandardBias&)

EndProc

Proc DaylightBias

    // Gibt die Sommerzeit-Zeitverschiebung
    // gegenüber GMT-Uhrzeit in Minuten zurück.
    Var udtTZI# = New(TIME_ZONE_INFORMATION)
    GetTimeZoneInformation(udtTZI#)
    Return -(udtTZI#.Bias& + udtTZI#.DaylightBias&)

EndProc

Proc CurrentBias

    // Gibt die aktuelle Zeitverschiebung
    // gegenüber GMT-Uhrzeit in Minuten zurück.
    Var udtTZI# = New(TIME_ZONE_INFORMATION)
    Var RetVal& = 0
    RetVal& = GetTimeZoneInformation(udtTZI#)

    With udtTZI#

        If RetVal& = &TIME_ZONE_ID_DAYLIGHT

            RetVal& = -(.Bias& + .DaylightBias&)

        Else

            RetVal& = -(.Bias& + .StandardBias&)

        EndIf

    EndWith

    Return RetVal&

EndProc

Proc DaylightName

    // Gibt den Klartextnamen der Sommerzeit-Zeitzone zurück.
    Var udtTZI# = New(TIME_ZONE_INFORMATION)
    GetTimeZoneInformation(udtTZI#)
    Return Translate$(Char$(udtTZI#,88,63),"z","")

EndProc

Proc StandardName

    // Gibt den Klartextnamen der Standardzeit-Zeitzone zurück.
    Var udtTZI# = new(TIME_ZONE_INFORMATION)
    GetTimeZoneInformation(udtTZI#)
    Return Translate$(Char$(udtTZI#,4,63),"z","")

EndProc

Proc GMTTime

    // Gibt die aktuelle GMT-Uhrzeit (inkl. Datum) zurück.
    GMTTime = DateAdd("n", -CurrentBias(), Now)
    Var Date# = new(SYSTEMTIME)
    Var Bias% = CurrentBias()

    With Date#

        .wYear% = Val(Left$(Date$(3),4))
        .wMonth% = Val(Mid$(Date$(3),5,2))
        .wDay% = Val(Right$(Date$(3),2))
        .wHour% = Val(Left$(Time$(0),2))
        .wMinute% = Val(Right$(Time$(0),2))
        .wSecond% = Val(Left$(Time$(1),2))

    EndWith

    Return DateAddMinutes(Date#,Bias%)

EndProc

Proc FirstDateDaylight

    // Gibt das Startdatum der Sommerzeit zurück.
    Parameters InYear%
    Var udtTZI# = new(TIME_ZONE_INFORMATION)
    Var Date# = new(SYSTEMTIME)
    Case InYear% = 0 : InYear% = Val(Left$(Date$(3),4))
    GetTimeZoneInformation(udtTZI#)
    In .wMonth steht der Monat der Umstellung
    In .wDay steht die Woche der Umstellung

    With udtTZI#

        Date#.wYear% = .DaylightDate!wYear%
        Date#.wMonth% = .DaylightDate!wMonth%
        Date#.wDayOfWeek% = .DaylightDate!wDayOfWeek%
        Date#.wDay% = .DaylightDate!wDay%
        Date#.wHour% = .DaylightDate!wHour%
        Date#.wMinute% = .DaylightDate!wMinute%
        Date#.wSecond% = .DaylightDate!wSecond%
        Date#.wMilliseconds% = .DaylightDate!wMilliseconds%

    EndWith

    Return GetTimezoneChangeDate(Date#, InYear%)

EndProc

Proc FirstDateStandard

    // Gibt das Startdatum der Standardzeit zurück.
    Parameters InYear%
    Var udtTZI# = new(TIME_ZONE_INFORMATION)
    Var Date# = new(SYSTEMTIME)
    Case InYear% = 0 : InYear% = Val(Left$(Date$(3),4))
    GetTimeZoneInformation(udtTZI#)
    In .wMonth steht der Monat der Umstellung
    In .wDay steht die Woche der Umstellung

    With udtTZI#

        Date#.wYear% = .StandardDate!wYear%
        Date#.wMonth% = .StandardDate!wMonth%
        Date#.wDayOfWeek% = .StandardDate!wDayOfWeek%
        Date#.wDay% = .StandardDate!wDay%
        Date#.wHour% = .StandardDate!wHour%
        Date#.wMinute% = .StandardDate!wMinute%
        Date#.wSecond% = .StandardDate!wSecond%
        Date#.wMilliseconds% = .StandardDate!wMilliseconds%

    EndWith

    Return GetTimezoneChangeDate(Date#, InYear%)

EndProc

Proc GetTimezoneChangeDate

    // In Data.wDayOfWeek wird ein Wochentag übergeben. Die Information in .wDay
    // legt fest, in welcher Woche des Monats der betroffene Tag zu ermitteln
    // ist.
    Parameters Data#, InYear%
    Var dtTemp# = new(SYSTEMTIME)
    Var lMonthFirstWeekday& = 0
    Var lMonthlastWeekday& = 0

    With Data#

        // Wochentag des ersten Tages im Monat berechnen
        lMonthFirstWeekday& = Weekday(InYear%, .wMonth%, 1)
        .wYear% = InYear%
        // Den gesuchten Tag ermitteln
        .wDay% = .wDayOfWeek% - lMonthFirstWeekday& + .wDay% * 7 + 1
        Case .wDay% > LastDay(.wMonth%) : .wDay% = .wDay% - 7

    EndWith

    Return DTFormat(Data#)

EndProc

------------
TESTPROGRAMM
------------
CLS
Beispiel()
WaitInput
End

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
23.09.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.664 Betrachtungen

Unbenanntvor 0 min.
E.T.25.12.2020
Uwe Lang08.08.2016
Julian Schmidt04.08.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie