2012-03-26 8 views
16

Ich finde es schwer zu verstehen, wie UTC funktioniert.Wie konvertiert man DateTime in bestimmte Zeitzone?

Ich habe folgendes zu tun, aber ich bin immer noch verwirrt, wenn ich das richtige Ergebnis bekommen würde.

Ziele:

  1. alle Stellen Sie sicher gespeichert Daten in der Datenbank in UTC-Format
  2. Sicherstellen, dass alle zurück Termine sind in Manila Zeit

So ist die

  • aktualisieren DefaultTimezone ist in Manila Zeit sind Code:

    public ConvertDate(DateTime? dateTime) 
    { 
        if (dateTime != null) 
        { 
         Value = (DateTime)dateTime; 
         TimeZone = GetFromConfig.DefaultTimeZone(); 
        } 
    } 
    
    
    public ConvertDate(DateTime? dateTime, int GMTTimeZone) 
    { 
        if (dateTime != null) 
        { 
         Value = (DateTime)dateTime; 
         TimeZone = GMTTimeZone; 
        } 
    } 
    
    
    public int TimeZone 
    { 
        get { return m_TimeZone; } 
        set { m_TimeZone = value; } 
    } 
    
    
    DateTime m_Value; 
    public DateTime Value 
    { 
        get { return m_Value; } 
        set 
        { 
         m_Value = value; 
         DateTime converted = m_Value.ToUniversalTime().ToLocalTime(); 
        } 
    } 
    

    Verwendungsbeispiel:

    DateTime SampleInputFromUser = new DateTime(2012, 1, 22); 
    ConvertDate newConversion = new ConvertDate(SampleInputFromUser, 21); 
    DateTime answer = newConversion.Value; 
    

    Jetzt verwirrt für 'Time-Zone' ich. Ich weiß nicht, wie man es benutzt, um die Ziele zu erreichen.
    Hoffe, dass Sie meine Frage verstehen und haben die Idee, die Ziele zu erledigen.

    bearbeiten

    Nach @raveturned Antwort, habe ich diesen Code ein:

    *** Hinzugefügt in ConvertDate Methode

    TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey()); 
    ManilaTime = TimeZoneInfo.ConvertTime(dateTime.Value, TimeZoneInfo.Local, timeInfo).ToUniversalTime(); 
    

    ** New Property

    DateTime _ManilaTime; 
    public DateTime ManilaTime 
    { 
        get { return _ManilaTime; } 
        set { _ManilaTime = value; } 
    } 
    
  • +0

    Mögliche Duplikat http://stackoverflow.com/questions/246498/creating-a-datetime-in-a-specific-time-zone-in-c-sharp-fx-3-5 – Dotnet

    Antwort

    40

    Das .NET-Framework bereits cla Methoden und Methoden zum Konvertieren von DateTimes zwischen verschiedenen Zeitzonen. Sehen Sie sich die ConvertTime-Methoden der Klasse TimeZoneInfo an.

    Edit: Wenn Sie die Zeit setzen in die Datenbank zu erhalten, vorausgesetzt, es ist mit der richtigen Zeitzoneninformationen erstellt wurde Sie leicht zu UTC umwandeln kann:

    DateTime utcTime = inputDateTime.ToUniversalTime(); 
    

    Zeitinfo Erhalten Sie wie in der Frage bearbeiten getan :

    TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey()); 
    

    Wenn Sie die Datenbank Zeit Benutzer, wandelt es in der richtigen Zeitzone mit timeInfo senden.

    Persönlich würde ich versuchen, diese Logik getrennt von den Propery Get/Set-Methoden zu halten.

    +18

    Diese [Liste der Zeitzone IDs] (http://stackoverflow.com/a/7908482/29) könnte hilfreich sein –

    3
    TimeZoneInfo infotime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time (Mexico)"); 
    DateTime thisDate = TimeZoneInfo.ConvertTimeFromUtc(datetimeFromBD, infotime);