시간을 dst가 포함 하 고 날짜를 처리 하는 방법

소개

날짜와 시간을 처리 하는 응용 프로그램을 작성 하는 개발자는 날짜와 시간을 조작할 수 있는 여러 가지 기술을 사용할 수 있습니다. 특히, 특정 기본 운영 체제 Api, C 런타임 (CRT) 및 Microsoft.NET Framework 변환 수도 있습니다 시간과 날짜 조작. 이 여기서 날짜 및 시간 처리에 관련 된 일반적인 개념을 설명 합니다. 또한이 문서는 특정 제품과 기술에 일광 절약 시간제 (DST) 2007 변경 효과 설명합니다.

자세한 내용

시간 저장 및 조작

타임 스탬프는 날짜와 시간 조합을 지정 하는 값입니다. 일반적으로 타임 스탬프를 처리 해야 하는 응용 프로그램이 해당 타임 스탬프 utc (지역 표준시)를 저장 합니다. UTC의 장점은 UTC는 범용입니다. UTC는 현지 표준 시간대에 따라 하지 또는 dst. 그러나 UTC는 없고 대부분의 사용자와 관련 된 사용자에 게 친숙 합니다. UTC는 저장용 당연, 적합 한 표시는 없습니다. 따라서 대부분의 응용 프로그램 UTC 시간이 현지 시간으로 변환 사용자에 게는 타임 스탬프를 표시 하기 전에. 예를 들어, Windows 탐색기 적용할 표준 시간대 및 DST 설정을 UTC 타임 스탬프 Windows NT 파일 시스템 (NTFS) 디렉터리에 있는 파일에 대 한 시간과 날짜를 표시 하기 전에.

UTC 시간에서 로컬 시간으로 변환 두 개의 오프셋을 적용으로 생각할 수 있습니다. 첫 번째는 표준 시간대 오프셋이 고 두 번째는 DST 오프셋. 따라서 현지 시간은 UTC 시간 및 표준 시간대 오프셋을 효과적으로 또한 적용 가능한 모든 DST 오프셋 합니다. 표준 시간대 오프셋은 매우 간단 합니다. 특정 시간대에 대해 컴퓨터를 구성 하 고 표준 시간대는 UTC에서의 오프셋. 확인 하려면 DST 오프셋이 적용 여부는 훨씬 더 복잡 합니다. 이 작업은 복잡 하 고 동적인 여러 규칙이 사용 합니다.

최근 이러한 복잡 한 DST 규칙을 DST 2007 변경. 미국 2007 년부터 dst 새 시작 날짜와 종료 날짜 채택 했습니다. 또한 일반적으로 다른 국가 정부를 변경 시작 날짜와 종료 날짜는 시간대에 따라 있는 것입니다. 다음 섹션에서는 개발자 관련 제품에 DST 2007 변경 사항의 영향을 설명합니다.

DST 2007에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오.

개발자 관련 기술에 대 한 DST 2007 효과

Windows

업데이트는 Windows Update 및 Microsoft Update 올바르게 다음 연도 및 DST 2007에 대 한 변경 내용을 적용 하려면 Windows를 사용 하는. 이 업데이트를 적용 한 후 Windows 제대로 계산 현지 시간을 UTC 시간에서 현재 오프셋은 dst. 기본 Api 및 네트워킹 시간 관련 Api 오프셋이 있습니다.

자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 다음 문서를 확인하십시오.

942763 2007 년 12 월 누적 표준 시간대 업데이트 Microsoft Windows 운영 체제

C 런타임 (CRT)

CRT 및 시간 날짜 변환을 수행합니다. 따라서 CRT도 새 DST 2007 규칙을 포함 하도록 업데이트 해야 합니다. CRT는 기본 운영 체제 API 시간 호출이 실패할 때 또는 TZ 환경 변수가 설정 되어 있는 경우에 자체 시간 처리를 수행 합니다. 업데이트는 각 버전의 Microsoft Visual Studio 함께 제공 되는 Crt 및 Windows와 함께 제공 되는 Crt도 사용할 수 있습니다. 이러한 업데이트는 CRT가 미국 표준 시간대에서 DST 변환을 올바르게 처리를 사용 합니다.

.NET Framework

.NET Framework 기본 운영 체제 호출에 의존합니다. 따라서.NET Framework 동작은 기본 운영 체제의 상태를 반영합니다. 별도 작업이 필요 하지 않습니다.

Visual Studio.NET 통합 개발 환경 (Ide)

Visual Studio.NET Ide 버전 2002, 2003 및 Microsoft Visual C++, Microsoft Visual C#, 및 Microsoft Visual Basic 2005를 포함합니다. 이러한 제품은 CRT를 포함 하기 때문에 영향을 받습니다. IDE 관련 업데이트는 필요 없습니다.

Visual Studio 2005 Team Foundation Server

Visual Studio 2005 Team Foundation Server 기본 운영 체제 날짜 및 시간 변환에 의존합니다. 따라서 Visual Studio 2005 Team Foundation Server 운영 체제와 동일한 동작을 보여줍니다. Visual Studio 2005 Team Foundation Server Microsoft SQL Server, SQL Server Reporting Services 및 Windows SharePoint Services 의존 합니다. 관련 업데이트는 운영 체제, SQL Server 및 Windows SharePoint Services 사용 하 여 컴퓨터를 업데이트 해야 합니다. 모든 관련 업데이트는 영향을 받는 모든 컴퓨터에 동시에 적용 되어야 합니다. 별도 Visual Studio 2005 Team Foundation Server 업데이트는 필요 없습니다.

Visual Studio 2005 Team System

운영 체제를 통해, Visual Studio 2005 Team Foundation Server 및 CRT를 통해 Visual Studio 2005 Team System에 영향이 있습니다. 별도 Visual Studio 2005 Team System 작업이 필요 하지 않습니다.

Visual SourceSafe

2007 년에서 Visual SourceSafe DST 문제에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.

2007 년에서 931804 visual SourceSafe 일광 절약 시간제 문제

Visual Basic 6.0 런타임

Visual Basic 6.0 런타임 영향을 받지 않습니다.

Visual C++ 6.0

Visual C++ 6.0 지원 되지 않습니다.

자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오.

Windows Vista 용 Windows 소프트웨어 개발 키트 (SDK)



이 SDK에는 DST 2007 변경 사항의 영향을 받는 CRT 버전이 포함 되어 있습니다. 이 SDK의 설치 과정에서 해당 버전의 CRT 설치 되어 있지 않은 컴퓨터에서 Visual Studio 2005 CRT를 설치할 수 있습니다. 최신 버전의 CRT가 이미 설치 되어 있는 경우 SDK가 설치 된 최신 버전을 덮어쓰지 않습니다. SDK를 제거 해도 최신 버전의 CRT는 컴퓨터에 유지 됩니다. SDK를 설치 하기 전후에 하거나 Visual Studio 2005의 CRT 업데이트를 설치할 수 있습니다.

또한 Windows Vista 용 Windows SDK CRT 사용자 지정 c + + 응용 프로그램의 일부로 재배포에 대 한 Visual Studio 2005 crt 병합 모듈 (.msm 파일) 집합을 설치합니다. 응용 프로그램의 설치 폴더에 재배포 가능 CRT를 배포 하는 응용 프로그램에 Windows Vista 용 Windows SDK에서에서 CRT.msm 파일 대신 Visual Studio 2005의 CRT 업데이트에서 업데이트 된 CRT 배포 해야 합니다. Windows 설치 폴더에 재배포 가능 Visual Studio 2005의 CRT 업데이트를 배포 하는 응용 프로그램은 해당 컴퓨터에 재배포 가능 Visual Studio 2005의 CRT 업데이트를 적용 해야 합니다.

Microsoft Windows Server 2003 r 2에 대 한 SDK 플랫폼

이 SDK에는 DST 2007 변경 사항의 영향을 받는 CRT 버전이 포함 되어 있습니다. 고객이이 SDK에 대 한 릴리스 노트를 수행 하 고 필요한 경우 Visual Studio 2005의 CRT 업데이트를 사용 해야 합니다.

.NET Framework 2.0 SDK

이 SDK에는 DST 2007 변경 사항의 영향을 받는 CRT 버전이 포함 되어 있습니다. 이 SDK의 설치 과정에서 해당 버전의 CRT 설치 되어 있지 않은 컴퓨터에서 Visual Studio 2005 CRT를 설치할 수 있습니다. 최신 버전의 CRT가 이미 설치 되어 있는 경우 SDK가 설치 된 최신 버전을 덮어쓰지 않습니다. SDK를 제거 해도 최신 버전의 CRT는 컴퓨터에 유지 됩니다. SDK를 설치 하기 전후에 하거나 Visual Studio 2005의 CRT 업데이트를 설치할 수 있습니다.

Windows의 로컬 시간 변환

일반적으로 응용 프로그램 사용자에 게 날짜 및 시간 정보를 표시 하기 전에 UTC 시간은 현지 시간에 게 변환. Windows 응용 프로그램에서 타임 스탬프를 조작에 사용할 수 있는 여러 가지 Api를 제공 합니다.
  • GetSystemTime() 함수와 GetSystemTimeAsFileTime() 함수는 SYSTEMTIME 구조 또는 FILETIME 구조에서 현재 UTC 시간 얻을.
  • GetLocalTime() 함수는 SYSTEMTIME 구조에서 현재 현지 시간을 가져옵니다.
  • GetTimeZoneInformation() 함수는 현재 표준 시간대 및 DST 설정을 컴퓨터를 나타내는 TIME_ZONE_INFORMATION 구조를 가져옵니다.
  • SystemTimeToFileTime() 함수와 FileTimeToSystemTime() 함수는 SYSTEMTIME 구조와 FILETIME 구조 사이 마샬링합니다.
  • FileTimeToLocalFileTime() 함수와 LocalFileTimeToFileTime() 함수 변환 하 고 컴퓨터의 현재 표준 시간대 및 DST 설정을 사용 하 여 FILETIME 구조체 UTC와 현지 시간 간에 변환할.
  • SystemTimeToTzSpecificLocalTime() 함수와 TzSpecificTimeToSystemTime() 함수 SYSTEMTIME 구조에서 UTC 타임 스탬프를 로컬 SYSTEMTIME 구조를 변환합니다. 이러한 함수는 dst 시작 날짜와 종료 날짜를 지정 하는 TIME_ZONE_INFORMATION 구조를 사용 합니다. 기본적으로 현재 DST 규칙은 이러한 구조가 제공 되는 사용 됩니다.
  • NetRemoteTOD() 함수는 서버의 정보와 설정을 사용 하 여 원격 서버에서 시간을 가져옵니다.
참고: FileTimeToLocalFileTime() 함수와 LocalFileTimeToFileTime() 함수는 DST 정보와 현재 표준 시간대 정보를 사용 하 여 현지 시간과 UTC 시간 간의 변환을 수행 합니다. 이러한 변환은 변환 중인 타임 스탬프에 관계 없이 발생 합니다.

Windows 탐색기에서이 기능의 예를 보려면 DST를 사용 하는 표준 시간대에 있는 컴퓨터에서 다음이 단계를 따릅니다.

시스템 시계를 변경 하면 다음이 단계는 주의 해야 합니다. 따라서 다음이 단계를 수행 하기 전에 이러한 시간 변경에 반응할 수 있는 일정 응용 프로그램과 같은 모든 응용 프로그램을 종료 해야 합니다.
  1. 컴퓨터의 날짜를 DST 날짜로 변경 합니다. 예를 들어, 2006 년 7 월 1 일에 날짜를 설정 합니다.
  2. 같은 컴퓨터에서 NTFS 디렉터리에 Test.txt 라는 새 텍스트 파일을 만듭니다.
  3. 확인할 파일의 타임 스탬프가 Windows 탐색기에 다음과 같이 표시 됩니다.
    7/1/2006 3:37pm
  4. 컴퓨터의 날짜를 비 DST 날짜로 변경 합니다. 예를 들어, 2007 년 2 월 1 일 날짜를 설정 합니다.
  5. Windows 탐색기 창을 새로 고칩니다.
  6. 확인할 파일의 타임 스탬프가 Windows 탐색기에 다음과 같이 표시 됩니다.
    7/1/2006 2:37pm
이 예에서 파일의 UTC 타임 스탬프 변경 되지 않습니다. 그러나 타임 스탬프를 로컬 시간으로 변환 하는 데 사용 되는 규칙은 컴퓨터의 현재 날짜에 따라 달라 집니다. 3 단계에서 7 월 1 일 dst 기간에 포함 하기 때문에 DST 오프셋 적용 합니다. 6 단계에서는 2 월 1 일 떨어지지 dst 기간 때문에 DST 오프셋 없이 적용 했습니다. 이 문제는 파일의 타임 스탬프가 현지 시간에서 현지 시간을 명확 하 게 변환 될 수 있도록 발생 합니다.

자세한 내용은이 블로그를 참조 하십시오.SystemTimeToTzSpecificLocalTime() 메서드와 TzSpecificTimeToSystemTime() 메서드는 제공 된 TIME_ZONE_INFORMATION 구조를 사용 하 여 현지 시간과 UTC 시간 간의 변환 합니다. 제공 된 표준 시간대 정보가 없는 경우 이러한 함수는 현재 표준 시간대 규칙을 사용 하 고 타임 스탬프에 DST 오프셋을 하는지 여부를 결정 하는 DST 규칙을 적용 합니다. 이것은 기능적으로 현재 사용 중인 TIME_ZONE_INFORMATION 구조를 얻으려면 GetTimeZoneInformation() 메서드를 호출 합니다.

TIME_ZONE_INFORMATION 구조 dst 시작 날짜와 중지 날짜를 포함합니다. 따라서 TIME_ZONE_INFORMATION 구조에서 현재 표준 시간대 정보를 사용 하는 경우 TIME_ZONE_INFORMATION 구조 기록 부정확을 해질 수 있습니다. 현재 표준 시간대 정보와 DST 정보가 변환 중인 타임 스탬프를 반영 하지 않는 경우에 이러한 문제가 발생할 수 있습니다. 이 동작은 DST 2007 변경 된 날짜를 DST 시작 및 중지 시기를 제어 하는 규칙 때문에 달라 집니다.

이러한 함수에서 정확한 변환 하려면 응용 프로그램이 응용 프로그램이 이러한 함수를 호출할 때 정확한 TIME_ZONE_INFORMATION 구조를 제공 해야 합니다.

Windows의 동적 표준 시간대

Windows Vista에서는 동적 DST 표준 시간대를 소개합니다. 동적 DST는 시간대 인는 dst을 지원 합니다. 이러한 규칙은 레지스트리에 저장 됩니다. 응용 프로그램에서 GetDynamicTimeZoneInformation() 함수를 사용 하 여 규칙을 쿼리할 수 있습니다.

동적 표준 시간대 로케일 매년 DST 경계 미리 알고는 컴퓨터를 보다 쉽게 업데이트를 활성화 합니다. Vista 용 Windows SDK의 DYNAMIC_TIME_ZONE_INFORMATION 구조에 대 한 자세한 내용은 다음 Microsoft Developer Network (MSDN) 웹 사이트를 방문 하십시오.

C 런타임 (CRT)의 로컬 시간 변환

CRT를 가진 세 가지 모드를 타임 스탬프를 변환할 수 있습니다.
  • TZ 환경 변수가 설정 되어 있지 않으면 CRT Windows Api를 호출 하 고이 문서에 설명 된 대로 Windows 동작을 나타냅니다.
  • TZ 환경 변수가 설정 되어 있을 경우 CRT는 해당 설정을 기반으로 자체 변환을 수행 합니다. 이 시나리오에서는 변환을 수행할 때 새 DST 2007 규칙을 반영 하기를 CRT 업데이트 됩니다.
  • TZ 환경 변수가 설정 되지 않은 경우 원본으로 사용 하는 Windows Api에 실패, CRT 낮은 자체 변환을 TZ 환경 변수에 대 한 PST8PDT 값을 사용 하 여.
CRT에는 UTC를 현지 시간으로 변환 하는 고유한 논리가 포함 되어 있습니다. 응용 프로그램은 time () 함수와 같은 함수에서 UTC 타임 스탬프를 얻을 수 있습니다. 이러한 UTC 타임 스탬프는 time_t 값에 저장 됩니다. Localtime_s () 함수와 같은 함수를 사용 하 여 현지 시간으로 변환을 수행할 수 있습니다. Localtime_s () 함수는 헤더 파일 Time.h에에서 정의 된 tm 구조체를 채웁니다. Tm 구조는 TZ 환경 변수에 정의 되어 있는 표준 시간대와 타임 스탬프의 시간에 적용 되는 DST 규칙에 기반 합니다.

참고: 이러한 변환은 미국에 특정 규칙을 따릅니다.

DST 2007 업데이트를 적용 하기 전에 CRT는 미국 표준 시간대의 현재 타임 스탬프를 잘못 처리 합니다. DST 2007 업데이트를 적용 한 후 CRT는 과거 및 미래의 미국 날짜를 둘 다도 처리 합니다. CRT 업데이트는 "참조" 절에 나열 됩니다.

.NET Framework 로컬 시간 변환

.NET Framework 저장 하 고 타임 스탬프를 변환 하는 클래스를 포함 합니다. 이러한 클래스 DateTime 클래스 TimeZone 클래스, TimeSpan 클래스, DateTimeKind 클래스를 포함합니다. 앞에서 설명한 것 처럼 이러한 클래스는 주로 기본 플랫폼 구현에 따라 다릅니다. 이러한 클래스는 기본 운영 체제 Api와 같은 동작.

요청 된 양만큼 타임 스탬프를 오프셋 하는 함수는.NET Framework의 날짜 및 시간 클래스가 수행 하는 주요 동작 하나 관련이 있습니다. 예를 들어 AddHours() 함수를 AddMinutes() 함수는 DateTime 클래스의 AddSeconds() 함수 이러한 함수와 유사한 이름이 가진된 함수 DST 설정에 관계 없이 요청 된 양만큼만 타임 스탬프를 증가합니다. 이 문제는 기본 UTC 타임 스탬프에 간단한 산술 연산을 간주 될 수 있습니다. 그러나이 문제는 추가 인해 타임 스탬프가 DST 내외로 전달 하는 경우 예기치 않은 결과가 발생할 수 있습니다. 이 동작은 DST 2007 변경 사항과 관련이 없습니다.

권장 사항

다음 권장 사항은 개발자가 DST 2007의 영향을 최소화 하 고 일반적인 날짜 및 시간 처리를 향상 시킬 수 있습니다.
  • DST 2007 업데이트가 거의 자동 설치를 계획 해야 합니다. 계획 된 모든 DST 2007 업데이트에 적용 해야 짧은 시간에 서로 최대한. 업데이트 된 컴퓨터가 SQL 쿼리나 웹 서비스와 같은 메서드를 사용 하 여 업데이트 되지 않은 컴퓨터와 통신 하려고, 변환 오류가 발생할 수 있습니다. 마찬가지로, 한 대의 컴퓨터에 Windows 업데이트와 CRT 업데이트 같은 둘 이상의 업데이트가 필요할 경우 업데이트 동시에 적용 되어야 합니다.
  • UTC 타임 스탬프는 정확한 시간. 그는 일반적으로 대부분의 응용 프로그램에 관련 된 현지 시간으로 변환 합니다. 응용 프로그램은 항상 UTC 타임 스탬프를 저장 합니다. 표시 하기 위해 로컬 시간으로 변환 표준 시간대 정보와 DST 정보가 필요합니다. 다양 한 소스 로부터이 정보를 가져올 수 있습니다.
    • 응용 프로그램 변환에 대 한 현재 표준 시간대 및 DST 설정을 사용할 수 있습니다. 현재 표준 시간대 및 DST 설정이 사용 중이지 타임 스탬프의 시간에 하는 경우 변환에 대 한 부정확성을 초래할 수 있습니다.
    • 응용 프로그램은 이전의 정확한 표준 시간대 정보와 DST 정보가 UTC 타임 스탬프 외에도 저장할 수 있습니다.
    • 동적 표준 시간대를 사용할 수 있는 응용 프로그램 특정 UTC 타임 스탬프에 적용 되어야 하는 표준 시간대 정보를 확인 하려면 동적 표준 시간대를 사용할 수 있습니다. 이 옵션은 특정 타임 스탬프에 대 한 특정 표준 시간대에 대해 동적 표준 시간대 정보가 있으면 경우에 사용할 수 있습니다.
    • 응용 프로그램에서 로컬 타임 스탬프와 UTC 타임 스탬프를 저장할 수 있습니다. 이 이렇게 하면 나중에 변환 됩니다.
  • 타임 스탬프를 처리 하는 컴퓨터 간의 모든 통신에는 UTC 타임 스탬프를 사용 해야 합니다. 암시적으로 그러면 컴퓨터 모두 UTC에 대 한 동일한 컨텍스트 정보가 있습니다.
  • 응용 프로그램에서 날짜를 처리 하는 경우 테스트 날짜를 처리 하는 방법에 주의 해야 합니다. 일반적으로 시간 정보 없이 표시 되는 날짜 날짜와 오전 12 시 타임 스탬프가 저장 됩니다. 따라서 타임 스탬프의 시간 부분에서 해제-하나씩 오류가 될 수 있습니다 해제-하나씩 결과 실제 날짜에서 전날 오후 11 시에 이동 하는 경우.

참조

DST 2007 Microsoft 포털에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오:http://support.microsoft.com/gp/cp_dst자세한 내용은 클릭 Microsoft 기술 자료의 다음 문서를 참조 하는 다음 문서 번호:

942763 2007 년 12 월 누적 표준 시간대 업데이트 Microsoft Windows 운영 체제

931975 2007 년에서 일광 절약 시간제 변경에 대 한 SQL Server 2005와 SQL Server 2000을 준비 하는 방법

2007 년에서 931804 visual SourceSafe 일광 절약 시간제 문제

자세한 내용은 다음 Microsoft Developer Network (MSDN) 웹 사이트를 방문 하십시오.C 런타임 (CRT)에 대 한 DST 2007 업데이트를 얻으려면 Microsoft 기술 자료의 다음 문서를 참조 하는 다음 문서 번호를 클릭 합니다.
932305 수정: TZ 환경 변수 문제에 대 한 Visual C++.NET 2002 C 런타임 일광 절약 시간제 2007 업데이트

932304 수정: TZ 환경 변수 문제에 대 한 Visual C++.NET 2002 서비스 팩 1 C 런타임 일광 절약 시간제 2007 업데이트

932299 수정: TZ 환경 변수 문제에 대 한 Visual C++.NET 2003 C 런타임 일광 절약 시간제 2007 업데이트

932298 수정: TZ 환경 변수 문제에 대 한 Visual C++.NET 2003 서비스 팩 1 C 런타임 일광 절약 시간제 2007 업데이트

932392 수정: TZ 환경 변수에 대 한 Visual C++.NET 2005 C 런타임 일광 절약 시간제 2007 업데이트

932391 수정: TZ 환경 변수에 대 한 Visual C++.NET 2005 서비스 팩 1 C 런타임 일광 절약 시간제 2007 업데이트

932590 수정: TZ 환경 변수를 사용 하는 Windows 기반 응용 프로그램에는 DST 변경으로 인해 예상 대로 작동 하지 않을 수

속성

문서 ID: 932955 - 마지막 검토: 2017. 2. 7. - 수정: 2

피드백