/// Utilties related to epoch time module dcord.util.time; version (Posix) { import core.sys.posix.sys.time; /// Returns UTC time in microseconds long getEpochTimeMicro() { timeval t; gettimeofday(&t, null); return 10_000_00 * t.tv_sec + t.tv_usec; } /// Returns UTC time in milliseconds. long getEpochTimeMilli() { timeval t; gettimeofday(&t, null); return t.tv_sec * 1000 + t.tv_usec / 1000; } /// Returns UTC time in seconds. long getEpochTime() { return getEpochTimeMilli() / 1000; } } version (Windows) { import core.sys.windows.winbase; /// Returns UTC time in milliseconds. long getEpochTimeMilli() { SYSTEMTIME systemTime; GetSystemTime(&systemTime); FILETIME fileTime; SystemTimeToFileTime( &systemTime, &fileTime ); long fileTimeNano100; fileTimeNano100 = ((cast(long)fileTime.dwHighDateTime) << 32) + fileTime.dwLowDateTime; long posixTime = fileTimeNano100/10_000 - 116_444_736_000_00; return posixTime; } /// Returns UTC time in seconds. long getEpochTime() { return getEpochTimeMilli() / 1000; } }