
/*
 * Copyright (C) Igor Sysoev
 */


#include <ngx_config.h>
#include <ngx_core.h>


void ngx_gettimeofday(struct timeval *tp)
{
    uint64_t  intervals;
    FILETIME  ft;

    GetSystemTimeAsFileTime(&ft);

    /*
     * A file time is a 64-bit value that represents the number
     * of 100-nanosecond intervals that have elapsed since
     * January 1, 1601 12:00 A.M. UTC.
     *
     * Between January 1, 1970 (Epoch) and January 1, 1601 there were
     * 134744 days,
     * 11644473600 seconds or
     * 11644473600,000,000,0 100-nanosecond intervals.
     *
     * See also MSKB Q167296.
     */

    intervals = ((uint64_t) ft.dwHighDateTime << 32) | ft.dwLowDateTime;
    intervals -= 116444736000000000;

    tp->tv_sec = (long) (intervals / 10000000);
    tp->tv_usec = (long) ((intervals % 10000000) / 10);
}


void ngx_libc_localtime(struct tm *tm)
{
    time_t      now;
    struct tm  *t;

    now = ngx_time();
    t = localtime(&now);
    *tm = *t;
}


void ngx_libc_gmtime(struct tm *tm)
{
    time_t      now;
    struct tm  *t;

    now = ngx_time();
    t = gmtime(&now);
    *tm = *t;
}


ngx_int_t ngx_gettimezone(void)
{
    TIME_ZONE_INFORMATION  tz;

    if (GetTimeZoneInformation(&tz) != TIME_ZONE_ID_INVALID) {
        return -tz.Bias;
    }

    return 0;
}
