Artikel-ID: 555035 - Geändert am: Freitag, 23. Januar 2004 - Version: 1.0

P/Invoking SetTimezoneInformation() verursacht, DateTime.Now eine falsche Ortszeit zurückzugeben

Autor: Christopher Tacke MVP
Alles erweitern | Alles schließen

Zusammenfassung

Das Ändern des Timezone Bias des Geräts durch Platform Invocation nimmt falsch alle nachfolgende Aufrufe von DateTime.Now innerhalb desselben Prozesses vor.

Problembeschreibung

DateTime.Now gibt das GetLocalTime() API dem Festlegen des Zeitzone-Bias von P/Invoking SetTimezoneInformation nachdem einem unterschiedlichen Ergebnis als P/Invoking zurück

Ursache

Während Erstellung lädt das kompakte Framework-Ausführungsmodul (EE) die TimeZoneInformation in die Anwendungsdomäne. P/Invoking SetTimezoneInformation() ändert die Uhr der Geräte aber die Änderung ist dem EE-Cache nicht bekannt und der EE-Cache benötigt Änderungen in Konto nicht.

 

Lösung

Führen Sie Verwendung oder den Zeitzone-Bias, die die DateTime.Now innerhalb alle Anwendung oder Bibliothek dass beides ändert, von anderen Prozessen beeinträchtigt werden kann, die den Zeitzone-Bias ändert, nicht aus. 
 
GetSystemTime() oder GetLocalTime() wie wie folgt für Zuverlässigkeit P/Invoke:
 
[C#]

[DllImport("coredll", EntryPoint="GetSystemTime", SetLastError=true)]
internal static extern void GetSystemTime(out SYSTEMTIME st);
 
[DllImport("coredll", EntryPoint="GetLocalTime", SetLastError=true)]
internal static extern void GetLocalTime(out SYSTEMTIME st);
 
[StructLayout(LayoutKind.Sequential)]
public class SYSTEMTIME
{
    public short wYear;
    public short wMonth;
    public short wDayOfWeek;
    public short wDay;
    public short wHour;
    public short wMinute;
    public short wSecond;
    public short wMilliseconds;
}

 
[VB]

    Private Declare Sub GetLocalTime Lib "coredll.dll" (<Out()> ByVal st As SYSTEMTIME)

    Private Declare Sub GetSystemTime Lib "coredll.dll" (<Out()> ByVal st As SYSTEMTIME)

    <StructLayout(LayoutKind.Sequential)> _
    Public Class SYSTEMTIME
        Public wYear As Short
        Public wMonth As Short
        Public wDayOfWeek As Short
        Public wDay As Short
        Public wHour As Short
        Public wMinute As Short
        Public wSecond As Short
        Public wMilliseconds As Short
    End Class


Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft .NET Compact Framework
Keywords: 
kbpubmvp kbpubtypecca kbhowto KB555035 KbMtde kbmt
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 555035  (http://support.microsoft.com/kb/555035/en-us/ )
Community Solutions ContentCOMMUNITY SOLUTIONS ? VERZICHTERKLÄRUNG
MICROSOFT CORPORATION BZW: SEINE LIEFERANTEN LEHNEN JEGLICHE VERANTWORTUNG FÜR DIE EIGNUNG, VERLÄSSLICHKEIT UND RICHTIGKEIT DES ENTHALTENEN INHALTS UND DER ENTHALTENEN GRAFIKEN AB. ALLE INFORMATIONEN WERDEN WIE BESEHEN OHNE JEDE GEWÄHRLEISTUNG BEREITGESTELLT. MICROSOFT UND SEINE LIEFERANTEN SIND NICHT VERANTWORTLICH UND ÜBERNEHMEN KEINE VERANTWORTUNG FÜR DIE BESCHAFFENHEIT DER ENTHALTENEN INFORMATIONEN UND GRAFIKEN EINSCHLIESSLICH JEDER KONKLUDENTEN BESCHAFFENHEIT, GARANTIE DER HANDELSÜBLICHKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK; FACHMÄNNISCHER BEMÜHUNGEN; DES EIGENTUMSVORBEHALTS ODER DER NICHTVERLETZUNG VON RECHTEN DRITTER. Die folgenden Regeln gelten für Schadensersatzforderungen und die Entschädigung für vergebliche Ausgaben, unabhängig von der Rechtsgrundlage einschließlich Schadensersatzrecht: Microsoft Corporation ist nur haftbar für absichtliche Handlungen, grobe Fahrlässigkeit, Tod oder Körperverletzung sowie für Ansprüche auf der Grundlage des Produkthaftpflichtrechts. Microsoft Corporation ist auch haftbar für leichte Fahrlässigkeit, falls die Microsoft Corporation materiellen Vertragspflichten nicht nachkommt. In solchen Fällen beschränkt sich die Haftbarkeit der Microsoft Corporation auf allgemein übliche und vorhersehbare Schadensersatzansprüche. In allen übrigen Fällen, einschließlich dem geltenden Schadensersatzrecht, ist die Microsoft Corporation nicht haftbar für leichte Fahrlässigkeit. Dies trifft ebenfalls auf die Lieferanten der Microsoft Corporation zu.
 

SPRACHE AUSWÄHLEN