[fix] fix ntp time calculation

This commit is contained in:
dijunkun
2025-02-25 17:32:21 +08:00
parent d1177747fd
commit ee70280056
2 changed files with 12 additions and 17 deletions

View File

@@ -15,6 +15,17 @@
#include <windows.h> #include <windows.h>
#endif #endif
uint64_t ConvertToNtpTime(int64_t time_us) {
constexpr int64_t kMicrosecondsPerSecond = 1000000;
constexpr uint64_t kNtpFractionalUnit = 0x100000000; // 2^32
uint32_t seconds = static_cast<uint32_t>(time_us / kMicrosecondsPerSecond);
uint32_t fraction =
static_cast<uint32_t>((time_us % kMicrosecondsPerSecond) *
kNtpFractionalUnit / kMicrosecondsPerSecond);
uint64_t ntp_time = (static_cast<uint64_t>(seconds) << 32) | fraction;
return ntp_time;
}
int64_t SystemClock::CurrentTimeNs() { int64_t SystemClock::CurrentTimeNs() {
int64_t ticks = -1; // Default to error case int64_t ticks = -1; // Default to error case
@@ -64,20 +75,7 @@ int64_t SystemClock::CurrentTimeMs() { return CurrentTimeNs() / 1000000LL; }
int64_t SystemClock::CurrentTime() { return CurrentTimeNs() / 1000000000LL; } int64_t SystemClock::CurrentTime() { return CurrentTimeNs() / 1000000000LL; }
int64_t SystemClock::CurrentNtpTime() { int64_t SystemClock::CurrentNtpTime() {
int64_t current_time_s = CurrentTime(); return ConvertToNtpTime(CurrentTimeNs());
return current_time_s + kNtpEpochOffset;
}
int64_t SystemClock::CurrentNtpTimeMs() {
return CurrentUtcTimeMs() + kNtpEpochOffset * 1000LL;
}
int64_t SystemClock::CurrentNtpTimeUs() {
return CurrentUtcTimeUs() + kNtpEpochOffset * 1000000LL;
}
int64_t SystemClock::CurrentNtpTimeNs() {
return CurrentUtcTimeNs() + kNtpEpochOffset * 1000000000LL;
} }
int64_t SystemClock::CurrentUtcTimeNs() { int64_t SystemClock::CurrentUtcTimeNs() {

View File

@@ -23,9 +23,6 @@ class SystemClock {
int64_t CurrentTimeNs(); int64_t CurrentTimeNs();
int64_t CurrentNtpTime(); int64_t CurrentNtpTime();
int64_t CurrentNtpTimeMs();
int64_t CurrentNtpTimeUs();
int64_t CurrentNtpTimeNs();
int64_t CurrentUtcTime(); int64_t CurrentUtcTime();
int64_t CurrentUtcTimeMs(); int64_t CurrentUtcTimeMs();