hackedteam/core-winmobile

View on GitHub
Mornella/Mornella_Mobile/Date.cpp

Summary

Maintainability
Test Coverage
#include "Date.h"

Date::Date(const wstring& d) {
    date = d;
}

Date::Date() {
    date = L"";
}

unsigned __int64 Date::stringToMsFromMidnight() {
    ULARGE_INTEGER uLarge;

    uLarge.QuadPart = 0;

    if (date.empty()) {
        return uLarge.QuadPart;
    }

    UINT hours, minutes, seconds;

    swscanf(date.c_str(), L"%d:%d:%d", &hours, &minutes, &seconds);

    uLarge.QuadPart = ((hours * 3600) + (minutes * 60) + seconds) * 1000;

    // From 100ns to ms
    return uLarge.QuadPart / 10000;
}

unsigned __int64 Date::stringDateToMs() {
    ULARGE_INTEGER uLarge;
    SYSTEMTIME st;
    FILETIME ft;
    UINT year, month, day, hours, minutes, seconds;

    uLarge.QuadPart = 0;

    if (date.empty()) {
        return uLarge.QuadPart;
    }

    //Format "YYYY-MM-DD HH:MM:SS"
    swscanf(date.c_str(), L"%d-%d-%d %d:%d:%d", &year, &month, &day, &hours, &minutes, &seconds);

    ZeroMemory(&st, sizeof(st));

    st.wYear = year;
    st.wMonth = month;
    st.wDay = day;
    st.wHour = hours;
    st.wMinute = minutes;
    st.wSecond = seconds;

    ZeroMemory(&ft, sizeof(ft));
    SystemTimeToFileTime(&st, &ft);

    uLarge.LowPart = ft.dwLowDateTime;
    uLarge.HighPart = ft.dwHighDateTime;

    return uLarge.QuadPart / 10000;
}

// ms converted from provided date to UTC current time + provided date
// Example: 01:01:05 becomes: year + month + day + 01 + 01 + 05 in ms
unsigned __int64 Date::stringToAbsoluteMs() {
    SYSTEMTIME st;
    FILETIME ft;
    ULARGE_INTEGER uLarge;
    UINT hours, minutes, seconds;

    if (date.empty()) {
        return 0;
    }

    swscanf(date.c_str(), L"%d:%d:%d", &hours, &minutes, &seconds);

    ZeroMemory(&st, sizeof(st));
    GetSystemTime(&st);

    st.wHour = hours;
    st.wMinute = minutes;
    st.wSecond = seconds;
    st.wMilliseconds = 0;

    ZeroMemory(&ft, sizeof(ft));
    SystemTimeToFileTime(&st, &ft);

    uLarge.LowPart = ft.dwLowDateTime;
    uLarge.HighPart = ft.dwHighDateTime;

    return uLarge.QuadPart;
}

// current time converted in UTC ms
unsigned __int64 Date::getCurAbsoluteMs() {
    SYSTEMTIME st;
    FILETIME ft;
    ULARGE_INTEGER uLarge;

    ZeroMemory(&st, sizeof(st));
    GetSystemTime(&st);

    ZeroMemory(&ft, sizeof(ft));
    SystemTimeToFileTime(&st, &ft);

    uLarge.LowPart = ft.dwLowDateTime;
    uLarge.HighPart = ft.dwHighDateTime;

    return uLarge.QuadPart / 10000;
}

void Date::setDate(const wstring& d) {
    date = d;
}

unsigned int Date::getCurMsFromMidnight() {
    SYSTEMTIME st;
    UINT ms;
    
    ZeroMemory(&st, sizeof(st));

    GetSystemTime(&st);

    st.wYear = 0;
    st.wMonth = 0;
    st.wDayOfWeek = 0;
    st.wDay = 0;

    ms = ((st.wHour * 3600) + (st.wMinute * 60) + st.wSecond) * 1000;

    return ms;
}

unsigned int Date::getMsDay() {
    return (unsigned int)(86400 * 1000); 
}