1 /// Utilties related to unix time
2 module dscord.util.time;
3 
4 version (Posix) {
5   import core.sys.posix.sys.time;
6 
7   /// Returns UTC time in microseconds
8   long getUnixTimeMicro() {
9     timeval t;
10     gettimeofday(&t, null);
11     return 1000000 * t.tv_sec + t.tv_usec;
12   }
13 
14   /// Returns UTC time in milliseconds.
15   long getUnixTimeMilli() {
16     timeval t;
17     gettimeofday(&t, null);
18     return t.tv_sec * 1000 + t.tv_usec / 1000;
19   }
20 
21   /// Returns UTC time in seconds.
22   long getUnixTime() {
23     return getUnixTimeMilli() / 1000;
24   }
25 }
26 
27 version (Windows) {
28   import core.sys.windows.winbase;
29 
30   long getUnixTimeMilli() {
31     SYSTEMTIME systemTime;
32     GetSystemTime(&systemTime);
33     FILETIME fileTime;
34     SystemTimeToFileTime( &systemTime, &fileTime );
35     long fileTimeNano100;
36     fileTimeNano100 = ((cast(long)fileTime.dwHighDateTime) << 32) + fileTime.dwLowDateTime;
37     long posixTime = fileTimeNano100/10000 - 11644473600000;
38     return posixTime;
39   }
40 
41   long getUnixTime() {
42     return getUnixTimeMilli() / 1000;
43   }
44 }