diff --git a/src/utils/port.c b/src/utils/port.c
index 155b9bb1e1bdd18ab1233e03a0f2728c49649da4..33b6f69bdac028d340d027db0a780eb8e837f235 100644
--- a/src/utils/port.c
+++ b/src/utils/port.c
@@ -881,20 +881,20 @@ void bctbx_shm_close(void *mem) {
 #pragma GCC diagnostic ignored "-Wunused-parameter"
 #endif // _MSC_VER
 static void _bctbx_get_cur_time(bctoolboxTimeSpec *ret, bool_t realtime) {
-#if defined(_WIN32_WCE) || defined(WIN32)
-#if defined(BCTBX_WINDOWS_DESKTOP) && !defined(ENABLE_MICROSOFT_STORE_APP) && !defined(BCTBX_WINDOWS_UWP)
-	DWORD timemillis;
+#ifdef _WIN32
 #if defined(_WIN32_WCE)
+	DWORD timemillis;
 	timemillis = GetTickCount();
-#else
-	timemillis = timeGetTime();
-#endif
 	ret->tv_sec = timemillis / 1000;
 	ret->tv_nsec = (timemillis % 1000) * 1000000LL;
 #else
-	ULONGLONG timemillis = GetTickCount64();
-	ret->tv_sec = timemillis / 1000;
-	ret->tv_nsec = (timemillis % 1000) * 1000000LL;
+	FILETIME lifeTime;
+	GetSystemTimePreciseAsFileTime(&lifeTime);
+	// conversion to Unix Epoch
+	uint64_t nsec =
+	    (((uint64_t)lifeTime.dwHighDateTime << 32ULL) + lifeTime.dwLowDateTime - 116444736000000000ULL) * 100ULL;
+	ret->tv_sec = nsec / 1000000000ULL;
+	ret->tv_nsec = nsec % 1000000000ULL;
 #endif
 #else
 	struct timespec ts;
@@ -1944,7 +1944,7 @@ void bctbx_uint32_to_str(uint8_t output_string[9], uint32_t input_uint32) {
 	output_string[4] = bctbx_byte_to_char((uint8_t)((input_uint32 >> 12) & 0x0F));
 	output_string[5] = bctbx_byte_to_char((uint8_t)((input_uint32 >> 8) & 0x0F));
 	output_string[6] = bctbx_byte_to_char((uint8_t)((input_uint32 >> 4) & 0x0F));
-	output_string[7] = bctbx_byte_to_char((uint8_t)((input_uint32) & 0x0F));
+	output_string[7] = bctbx_byte_to_char((uint8_t)((input_uint32)&0x0F));
 	output_string[8] = '\0';
 }
 
@@ -1975,7 +1975,7 @@ void bctbx_uint64_to_str(uint8_t output_string[17], uint64_t input_uint64) {
 	output_string[12] = bctbx_byte_to_char((uint8_t)((input_uint64 >> 12) & 0x0F));
 	output_string[13] = bctbx_byte_to_char((uint8_t)((input_uint64 >> 8) & 0x0F));
 	output_string[14] = bctbx_byte_to_char((uint8_t)((input_uint64 >> 4) & 0x0F));
-	output_string[15] = bctbx_byte_to_char((uint8_t)((input_uint64) & 0x0F));
+	output_string[15] = bctbx_byte_to_char((uint8_t)((input_uint64)&0x0F));
 	output_string[16] = '\0';
 }