2013-08-13 4 views
7

Wie kann ich Universal-Zeitzone für die gesamte Anwendung festlegen.Wie universelle Zeitzone für die gesamte Anwendung in Winforms

Damit auch wenn die Zeitzone geändert wird, sollte die Anwendung Zeit nach universeller Zeitzone anzeigen.

So ist es möglich, gesamte Anwendungszeitzone einzustellen?

+1

Es ist ein bisschen spät zu fragen, aber bitte sagen Sie mir, wie ist meine Frage unklar. Garath gab die perfekte Antwort auf meine Frage. – user1331032

Antwort

2

Leider können Sie nicht (Sie bei Jon Skeet Antwort in folgendem Beitrag aussehen könnte: Setting/Changing an .NET application's TimeZone). So haben Sie zwei Möglichkeiten:

  1. Everywhwer DateTime.ToUniversalTime verwenden (MSDN description)
  2. Ihre eigene Klasse erstellen, die DateTime darstellt und es verwenden, anstatt
  3. Sie können einen weiteren Trick verwenden. Sie können DateTime zum Beispiel mit Microsoft Fakes verhöhnen. Schauen Sie hier mehr: Using shims to isolate your application from other assemblies for unit testing
+0

Können Sie DateTime übernehmen? Es ist struct –

+0

@SriramSakthivel Sie haben Recht. Ich habe meine Antwort aktualisiert. –

+1

Wie wäre es mit 'DateTime.UtcNow' viel besser oder? Da 'DateTime.Now' intern' DateTime.UtcNow' verwendet, um die lokale Zeit zu berechnen –

-1

Wie kann ich die Universal-Zeitzone für die gesamte Anwendung einstellen?

Verwenden Sie den folgenden Code ein:

TimeZone zone = TimeZone.CurrentTimeZone; 
DateTime universal = zone.ToUniversalTime(DateTime.Now); 
1

Ihre beste Möglichkeit ist, eine localization Klasse zu erstellen, die in Datetime Ihrer gewünschten Zeitzone zurückkehren werden. In Ihrer Anwendung sollten Sie diese Klasse verwenden und nicht DateTime.Now, wenn Sie Datum und Uhrzeit angezeigt werden soll:

class Localization 
{ 

    public Localization(string timeZoneId = "UTC") 
    { 
     TimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); 
    } 

    public virtual TimeZoneInfo TimeZone { get; set; } 

    public DateTime Now 
    { 
     get 
     { 
      return  TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZone) 
     } 
    } 
} 

Sie oben Klasse Singleton machen können, wenn Sie nur eine statische Zeitzone in Ihre Anwendung.

var locale = new Localization(); // default is UTC, provide yours. 
var now = locale.Now; 
Verwandte Themen