2009-01-14 7 views
25

Ich möchte eine Liste aller verfügbaren Zeitzonen auf einer Windows-Maschine haben. Wie kann ich das in .NET machen?Wie zähle ich alle Zeitzonen in .NET auf?

Ich weiß um die TimeZoneInfo.GetSystemTimeZones Methode, aber dies gibt nur die aktuell gewählte Zeitzone (n)

DateTimeOffset current = DateTimeOffset.Now; 
ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones(); 
Console.WriteLine("You might be in the following time zones:"); 
foreach (TimeZoneInfo timeZoneInfo in timeZones) 
{ 
    // Compare offset with offset for that date in that time zone 
    if (timeZoneInfo.GetUtcOffset(current).Equals(current.Offset)) 
    { 
     Console.WriteLine(" {0}", timeZoneInfo.DisplayName); 
    } 
} 
+0

Leiden von cut-n -Paste-Itis? :) Sie durchlaufen bereits die gesamte Enumeration, filtern aber die Offsets weg, die nicht mit der aktuellen If-Anweisung identisch sind. – Spoike

+0

Ich habe das if im Code übersehen :( – gyurisc

Antwort

41

Nein es nicht, es gibt jede Zeitzone der Windows-Maschine über weiß (in meine Installation, das ist 91). Die if Aussage, die Sie dort haben, ist, was Ihre Ausgabe einschränkt. Nehmen Sie das heraus, aber lassen Sie den Teil, und Sie werden alle 91 (oder so) Zeitzonen sehen.

z.B.

ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones(); 

foreach (TimeZoneInfo timeZoneInfo in timeZones) 
    Console.WriteLine("{0}", timeZoneInfo.DisplayName); 

Das sollte 91 Zeitzonen auf Ihre Konsole schreiben.

+0

'timeZones.Count' = *** *** *** – Kiquenet

4

Ihr Code funktioniert gut für mich. Hier ist die Ausgabe auf meiner Box:

Sie in der folgenden Zeit sein könnten Zonen: (GMT) Casablanca (GMT)
Greenwich Mean Time: Dublin,
Edinburgh, Lissabon, London (GMT)
Monrovia, Reykjavik

, dass alle diejenigen, mit der gleichen zur Zeit versetzt ist, das ist, was Ihr Code deutlich zeigt - wenn Sie alle die Zeitzonen wollen, entfernen Sie einfach das „wenn“ -Teil, wie Robert sagt.

Wenn Sie denken, dass Sie mehr Zonen sehen sollten, könnten Sie uns sagen, in welcher Zeitzone Sie sich befinden, damit wir herausfinden können, welche anderen angezeigt werden sollen?

3

Diese Methode wird verwendet, um alle Zeitzonen in Dev Express Drop Down zu binden. Ich hoffe, es wird jemandem helfen.

private void FillTimeZone(ASPxComboBox ddlTimeZone) 
{ 
    ddlTimeZone.DataSource = TimeZoneInfo.GetSystemTimeZones(); 
    ddlTimeZone.DataBind(); 
    ListEditItem oListEditItem=new ListEditItem(); 
    oListEditItem.Text=Helper.SELECT; 
    oListEditItem.Value=Helper.SELECT; 
    ddlTimeZone.Items.Add(oListEditItem); 
    ddlTimeZone.SelectedIndex = 0; 
} 
1

Wenn eine json Ausgabe von einem WebAPI Anruf zu wollen:

using System; 
using System.Collections.Generic; 

namespace MyProject.ViewModels 
{ 
    public class TimeZoneViewModel 
    { 
     public readonly List<CTimeZone> CTimeZones; 

     public TimeZoneViewModel() 
     { 
      CTimeZones = new List<CTimeZone>(); 
      foreach (TimeZoneInfo z in TimeZoneInfo.GetSystemTimeZones()) 
      { 
       var tz = new CTimeZone(z.Id, z.DisplayName, z.BaseUtcOffset); 
       CTimeZones.Add(tz); 
      } 
     } 

    } 

    public class CTimeZone 
    { 
     public string Id { get; set; } 
     public string DisplayName { get; set; } 
     public TimeSpan BaseUtcOffset { get; set; } 

     public CTimeZone(string id, string displayName, TimeSpan utcOffset) 
     { 
      Id = id; 
      DisplayName = displayName; 
      BaseUtcOffset = utcOffset; 
     } 
    } 
} 

Dann ist es in WebAPI verwenden:

[HttpGet("Api/TimeZones")] 
public JsonResult GetTimeZones() 
{ 
    return Json(new TimeZoneViewModel().CTimeZones); 
} 

Ausgang:

[{ 
    "id": "Dateline Standard Time", 
    "displayName": "(UTC-12:00) International Date Line West", 
    "baseUtcOffset": "-12:00:00" 
    }, 
    { 
    "id": "UTC-11", 
    "displayName": "(UTC-11:00) Coordinated Universal Time-11", 
    "baseUtcOffset": "-11:00:00" 
    }, 
    { 
    "id": "Aleutian Standard Time", 
    "displayName": "(UTC-10:00) Aleutian Islands", 
    "baseUtcOffset": "-10:00:00" 
    }, 
    { 
    "id": "Hawaiian Standard Time", 
    "displayName": "(UTC-10:00) Hawaii", 
    "baseUtcOffset": "-10:00:00" 
    },...