Windows 용 API라서 Wine 소스에 있는 VariantTimeToSystemTime 함수를 뽑아서 재작성해보았다.

Linux , PHP 등에서 사용하면 될듯.. 혹시나 찾는 사람들이 있을까봐..

소스 코드는 절대 완벽하지 않으며, 재 조립하면서 문제점이 있을 수 있음.

#include <math.h>

typedef long            HRESULT;
#define DATE_MAX 2958465
#define DATE_MIN -657434
#define S_OK 0
#define TRUE 1
#define FALSE 0
#define E_INVALIDARG -1
#define IsLeapYear(y) (((y % 4) == 0) && (((y % 100) != 0) || ((y % 400) == 0)))
#define FAILED(stat) ((HRESULT)(stat)<0)


typedef unsigned short WORD;
typedef unsigned long ULONG;
typedef unsigned short USHORT;
typedef unsigned char BYTE;

typedef struct _SYSTEMTIME{
        WORD wYear;
        WORD wMonth;
        WORD wDayOfWeek;
        WORD wDay;
        WORD wHour;
        WORD wMinute;
        WORD wSecond;
        WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

typedef struct {
    SYSTEMTIME st;
    USHORT wDayOfYear;
} UDATE;


더보기


int VariantTimeToSystemTime(double dateIn, LPSYSTEMTIME lpSt)
{
  UDATE ud;


  if (FAILED(VarUdateFromDate(dateIn, 0, &ud)))
    return FALSE;

  *lpSt = ud.st;
  return TRUE;
}

int main()
{
char szBuff[8] = { 0xab, 0xaa, 0xaa, 0xaa, 0xe2, 0x87, 0xe3, 0x40 }; //2009/07/05 02:00:00
double *zz = (double*)szBuff;

SYSTEMTIME system_time;

VariantTimeToSystemTime(*zz, &system_time);
printf("%04d.%02d.%02d, %02d:%02d:%02d\n",
system_time.wYear, 
system_time.wMonth,
system_time.wDay,
system_time.wHour,
system_time.wMinute,
system_time.wSecond);
}

« PREV : 1 : ... 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : ... 30 : NEXT »