acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
time.h
1// Created by camilo on 2026-04-22 12:43 <3ThomasBorregaardSørensen!!
2#pragma once
3
4
5#include "acme/prototype/datetime/file_time.h"
6#include "acme/prototype/datetime/system_time.h"
7#ifdef WINDOWS
8#include "acme/_operating_system.h"
9#else
10#include "acme/operating_system/ansi/windows_time.h"
11#endif
12#include "acme/operating_system/shared_posix/time1.h"
13
14
15inline ::file_time as_file_time(const FILETIME &filetime)
16{
17
18 return {file_time_t{},
19 (::u64)::make_u64(filetime.dwLowDateTime, filetime.dwHighDateTime)};
20}
21
22
23inline FILETIME as_FILETIME(const ::file_time &filetime)
24{
25
26 return {.dwLowDateTime = ::lower_u32(filetime.m_uFileTime),
27 .dwHighDateTime = ::upper_u32(filetime.m_uFileTime)};
28}
29
30
31inline FILETIME as_FILETIME(const SYSTEMTIME &systemtime)
32{
33
34 FILETIME filetime;
35
36 ::SystemTimeToFileTime(&systemtime, &filetime);
37
38 return filetime;
39
40}
41
42
43inline SYSTEMTIME as_SYSTEMTIME(const ::earth::time &time)
44{
45
46 SYSTEMTIME st = {};
47
48 struct tm ttm;
49
50 struct tm *ptm;
51
52 ptm = tm_struct(&ttm, time);
53
54 st.wDay = ptm->tm_mday;
55 st.wDayOfWeek = ptm->tm_wday;
56 st.wHour = ptm->tm_hour;
57 st.wMilliseconds = 0;
58 st.wMinute = ptm->tm_min;
59 st.wMonth = ptm->tm_mon + 1;
60 st.wSecond = ptm->tm_sec;
61 st.wYear = 1900 + ptm->tm_year;
62
63 return st;
64}
65
66
67inline FILETIME as_FILETIME(const ::earth::time &time)
68{
69
70 FILETIME filetime{};
71
72 auto systemtime = as_SYSTEMTIME(time);
73
74 if (!::SystemTimeToFileTime(&systemtime, &filetime))
75 {
76
77#ifdef WINDOWS
78
79 auto lasterror = ::windows::get_last_error();
80
81#endif
82
83 // TRACELASTERROR();
84
85 ::memory_set(&filetime, 0, sizeof(filetime));
86
87 }
88
89 return filetime;
90
91}
92
93
94inline SYSTEMTIME as_SYSTEMTIME(const FILETIME &filetime)
95{
96
97 SYSTEMTIME systemtime;
98
99 ::FileTimeToSystemTime(&filetime, &systemtime);
100
101 return systemtime;
102}
103
104
105inline SYSTEMTIME as_SYSTEMTIME(const system_time &systemtime)
106{
107
108 return {.wYear = systemtime.wYear,
109 .wMonth = systemtime.wMonth,
110 .wDayOfWeek = systemtime.wDayOfWeek,
111 .wDay = systemtime.wDay,
112 .wHour = systemtime.wHour,
113 .wMinute = systemtime.wMinute,
114 .wSecond = systemtime.wSecond,
115 .wMilliseconds = systemtime.wMilliseconds};
116}
117
118
119inline system_time as_system_time(const SYSTEMTIME &systemtime)
120{
121
122 return {systemtime.wYear, systemtime.wMonth, systemtime.wDayOfWeek, systemtime.wDay,
123 systemtime.wHour, systemtime.wMinute, systemtime.wSecond, systemtime.wMilliseconds};
124}
125
126
127
128inline void toLocal_SYSTEMTIME(SYSTEMTIME& systemtime)
129{
130
131 FILETIME ft, localFt;
132
133 ft = as_FILETIME(systemtime);
134 // Convert file time from UTC format to local.
135 FileTimeToLocalFileTime(&ft, &localFt);
136
137 FileTimeToSystemTime(&localFt, &systemtime);
138
139}
Definition system_time.h:8
Definition aaa_time.h:13
Definition file_time.h:7