다음을 통해 공유


방법: 컴퓨터에 있는 표준 시간대 열거

업데이트: 2007년 11월

지정한 표준 시간대를 성공적으로 사용하려면 해당 표준 시간대에 대한 정보를 시스템에서 사용할 수 있어야 합니다. Windows XP 및 Windows Vista 운영 체제에서는 이 정보를 레지스트리에 저장합니다. 그러나 전세계에 있는 표준 시간대의 전체 수는 상당히 많지만 레지스트리에는 이들 중 일부에 대한 정보만 포함되어 있습니다. 또한 레지스트리 자체도 동적 구조이므로 그 내용이 실수나 고의로 변경될 수 있습니다. 따라서 응용 프로그램에 항상 특정 표준 시간대가 정의되어 있고 시스템에서 사용 가능한 것으로 가정할 수 없습니다. 표준 시간대 정보 응용 프로그램을 사용하는 많은 응용 프로그램의 첫 번째 단계로는 필요한 표준 시간대를 로컬 시스템에서 사용할 수 있는지 여부를 확인하거나 사용자에게 표준 시간대를 선택할 수 있는 목록을 제공하는 것입니다. 이를 위해 응용 프로그램에서는 로컬 시스템에 정의되어 있는 표준 시간대를 나열해야 합니다.

참고:

로컬 시스템에 정의되어 있지 않은 특정 표준 시간대가 응용 프로그램에 필요한 경우 응용 프로그램에서는 표준 시간대에 대한 정보를 serialize 및 deserialize하여 해당 시간대가 있는지 확인할 수 있습니다. 그런 다음 이 표준 시간대를 응용 프로그램 사용자가 선택할 수 있도록 목록 컨트롤에 추가할 수 있습니다. 자세한 내용은 방법: 포함 리소스에 표준 시간대 저장방법: 포함 리소스에서 표준 시간대 복원을 참조하십시오.

로컬 시스템에 있는 표준 시간대를 열거하려면

  1. TimeZoneInfo.GetSystemTimeZones 메서드를 호출합니다. 이 메서드는 TimeZoneInfo 개체의 제네릭 ReadOnlyCollection<T> 컬렉션을 반환합니다. 컬렉션의 엔트리는 해당하는 DisplayName 속성을 기준으로 정렬됩니다. 예를 들면 다음과 같습니다.

    Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones
    
    ReadOnlyCollection<TimeZoneInfo> tzCollection;
    tzCollection = TimeZoneInfo.GetSystemTimeZones();
    
  2. foreach 루프(C#의 경우) 또는 For Each…Next 루프(Visual Basic의 경우)를 사용하여 컬렉션의 개별 TimeZoneInfo 개체를 열거하고 각 개체에 대해 필요한 처리를 수행합니다. 예를 들어 다음 코드에서는 1단계에서 반환된 TimeZoneInfo 개체의 ReadOnlyCollection<T> 컬렉션을 열거하고 각 표준 시간대의 표시 이름을 콘솔에 나열합니다.

    For Each timeZone As TimeZoneInfo In tzCollection
       Console.WriteLine("   {0}: {1}", timeZone.Id, timeZone.DisplayName)
    Next
    
    foreach (TimeZoneInfo timeZone in tzCollection)
       Console.WriteLine("   {0}: {1}", timeZone.Id, timeZone.DisplayName);
    

사용자에게 로컬 시스템에 있는 표준 시간대의 목록을 제공하려면

  1. TimeZoneInfo.GetSystemTimeZones 메서드를 호출합니다. 이 메서드는 TimeZoneInfo 개체의 제네릭 ReadOnlyCollection<T> 컬렉션을 반환합니다.

  2. 1단계에서 반환된 컬렉션을 Windows Forms 또는 ASP.NET 목록 컨트롤의 DataSource 속성에 할당합니다.

  3. 사용자가 선택한 TimeZoneInfo 개체를 검색합니다.

다음 예제에서는 Windows 응용 프로그램에 대해 설명합니다.

예제

이 예제에서는 시스템에 정의되어 있는 표준 시간대를 목록 상자에 표시하는 Windows 응용 프로그램을 시작합니다. 그런 다음 사용자가 선택한 표준 시간대 개체의 DisplayName 속성 값이 포함된 대화 상자를 표시합니다.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo)
   tzCollection = TimeZoneInfo.GetSystemTimeZones()
   Me.timeZoneList.DataSource = tzCollection
End Sub

Private Sub OkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OkButton.Click
   Dim selectedTimeZone As TimeZoneInfo = DirectCast(Me.timeZoneList.SelectedItem(), TimeZoneInfo)
   MsgBox("You selected the " & selectedTimeZone.ToString() & " time zone.")
End Sub
private void Form1_Load(object sender, EventArgs e)
{
   ReadOnlyCollection<TimeZoneInfo> tzCollection; 
   tzCollection = TimeZoneInfo.GetSystemTimeZones();
   this.timeZoneList.DataSource = tzCollection;
}

private void OkButton_Click(object sender, EventArgs e)
{
   TimeZoneInfo selectedTimeZone = (TimeZoneInfo) this.timeZoneList.SelectedItem;
   MessageBox.Show("You selected the " + selectedTimeZone.ToString() + " time zone.");
}

System.Windows.Forms.ListBox 또는 System.Web.UI.WebControls.BulletedList 컨트롤과 같은 대부분의 목록 컨트롤을 사용하면 개체 변수의 컬렉션에서 IEnumerable 인터페이스를 구현하는 경우 해당 컬렉션을 DataSource 속성에 할당할 수 있습니다. 제네릭 ReadOnlyCollection<T> 클래스를 사용하여 이렇게 합니다. 컬렉션의 개별 개체를 표시하려면 컨트롤에서 개체의 ToString 메서드를 호출하여 개체를 나타내는 데 사용되는 문자열을 추출합니다. TimeZoneInfo 개체의 경우 ToString 메서드는 TimeZoneInfo 개체의 표시 이름 즉, DisplayName 속성의 값을 반환합니다.

참고:

목록 컨트롤에서는 개체의 ToString 메서드를 호출하므로 TimeZoneInfo 개체의 컬렉션을 컨트롤에 할당하고 컨트롤에 각 개체에 대한 의미 있는 이름을 표시할 수 있으며 사용자가 선택한 TimeZoneInfo 개체를 검색할 수 있습니다. 그러면 컬렉션에 있는 각 개체의 문자열을 추출하고, 이 문자열을 컬렉션에 할당한 다음 다시 컨트롤의 DataSource 속성에 할당하고, 사용자가 선택한 문자열을 검색한 다음 이 문자열을 사용하여 문자열이 설명하는 개체를 추출하는 일련의 작업이 필요하지 않습니다.

코드 컴파일

이 예제에는 다음 사항이 필요합니다.

  • System.Core.dll에 대한 참조를 프로젝트에 추가해야 합니다.

  • 다음 네임스페이스를 가져와야 합니다.

    System(C# 코드의 경우)

    System.Collections.ObjectModel

참고 항목

작업

방법: 포함 리소스에 표준 시간대 저장

방법: 포함 리소스에서 표준 시간대 복원

기타 리소스

시간 및 표준 시간대