프로그래밍

[win32] SystemTimeToVariantTime() 밀리세컨드 제외 변환문제

Mesia 2015. 10. 10. 09:14
증상
VariantTimeToSystemTime 함수를 사용 하 여 변형 시간을 시스템 시간으로 변환 하는 SystemTimeToVariantTime 함수 및 변형 시간을 시스템 시간으로 변환 하려면 밀리초 값 0으로 나타나거나 무시 됩니다.
원인
SystemTimeToVariantTime (사용 하는 VarUdateFromDate 함수) VariantTimeToSystemTime ( VarDateFromUdate 함수를 사용 하 여)는 최대 밀리초 레졸루트있지 않습니다.
해결방법
밀리초 확인을 요구 하는 경우 SystemTimeToVariantTime, VariantTimeToSystemTime, VarUdateFromDate또는 VarDateFromUdate 를 사용 하지 마십시오.

Windows NT 4.0 서비스 팩 4 (SP4), Windows 95 사용 하 여 구성 요소 개체 모델 DCOM (분산) 1.2 및 Windows 98 부터는 이제 자동화 지원 전달 사용자 정의 형식 (Udt) 변형 및 사용자 정의 형식의 기록할 때 메서드에 인수로. Udt 반환 방법 허용 하 고 구조에 대 한 포인터를 필요로 하는 메서드를 호출 하도록 (자동화 클라이언트) 자동화 컨트롤러의 프로그래머가. 위에서 언급 한 함수를 사용 하는 대신, 사용자에 게 SYSTEMTIME 구조를 줄 바꿈 수 있으며 자동화 인터페이스를 사용자 정의 데이터 형식을 전달할 수 있습니다.

상태
이 동작은 의도된 것입니다.
추가 정보
이 문제를 재현 하려면 다음 코드로 표준 콘솔 응용 프로그램에 대해 생성 된 코드를 바꿉니다.

#include "stdafx.h"
#include <ole2.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
	SYSTEMTIME stNow1, stNow2;
	GetSystemTime(&stNow1);
	stNow2 = stNow1;
	// Set different values for milliseconds.
	stNow1.wMilliseconds =10;
	stNow2.wMilliseconds =0;
	printf("SystemTime with Milliseconds:\n"
		"Hours: %d, Minutes: %d, Seconds: %d, Milliseconds: %d\n",
		stNow1.wHour, stNow1.wMinute, stNow1.wSecond, stNow1.wMilliseconds);
	printf("SystemTime without Milliseconds:\n"
		"Hours: %d, Minutes: %d, Seconds: %d, Milliseconds: %d\n",
		stNow2.wHour, stNow2.wMinute, stNow2.wSecond, stNow2.wMilliseconds);
	double dTime1,dTime2;
	SystemTimeToVariantTime (&stNow1,&dTime1);
	SystemTimeToVariantTime (&stNow2,&dTime2);
	printf("VariantTime from SystemTime with Milliseconds: "
		"%0.9f\n", dTime1);
	printf("VariantTime from SystemTime without Milliseconds: "
		"%0.9f\n", dTime2);
	printf("(Both of the above values are same, which shows that the\n"
		"SystemTimeToVariantTime conversion routine ignores Milliseconds)");
	// Calculate a variant time with milliseconds.
	// For example, .840845486 portion of 37085.840845486 corresponds
	// to 20 hours, 10 minutes, 49 seconds, and 50 milliseconds.
	dTime1 = 37085.840845486;
	printf("\n\nVariantTime with Milliseconds: %0.9f \n", dTime1);
	printf("SystemTime corresponding to above variant date:\n"
		"Hours: 20, Minutes: 20, Seconds: 49, Milliseconds: 50\n");
	SYSTEMTIME stCheck;
	VariantTimeToSystemTime(dTime1,&stCheck);
	printf("Value of Milliseconds in SystemTime after conversion: %d\n",
		stCheck.wMilliseconds );
	printf("(The above value shows that the VariantTimeToSystemTime\n"
		"conversion routine ignores Milliseconds)\n\n");
	return 0;
}
				

참고자료: https://support.microsoft.com/ko-kr/kb/297463