TimeSystem.h
#pragma once #include <stdint.h> class TimeSystem { public: TimeSystem(); // 上一帧刷新时间增量 毫秒 int64_t DeltaTime; //当前时间戳(毫秒) int64_t NowServerMilliseconds(); //当前时间戳(秒) int64_t NowServerSeconds(); //系统当前时间戳(毫秒) int64_t SysNowServerMilliseconds(); //系统当前时间戳(秒) int64_t SysNowServerSeconds(); //当前一天的0分0秒时间戳(秒) int32_t DayZero(); //自定义当前时间 void SetUserTime(int32_t now); private: // 刷新更新时间 void RefreshLastTime(); // 操作系统已运行时间(毫秒) int64_t OperatingSystemRunTime(); private: // 上次更新时间 int64_t m_last_time; //用户增加的毫秒数 int64_t m_user_add_time; friend class GameSystem; };
#include "TimeSystem.h" #include <chrono> TimeSystem::TimeSystem() { //操作系统已运行时间(毫秒) m_last_time = OperatingSystemRunTime(); //用户增加的毫秒数 m_user_add_time = SysNowServerMilliseconds() - OperatingSystemRunTime(); DeltaTime = 0; } int64_t TimeSystem::NowServerMilliseconds() { //当前时间 = 用户时间 + 操作系统运行的时间 return m_user_add_time + OperatingSystemRunTime(); } int64_t TimeSystem::NowServerSeconds() { return NowServerMilliseconds() / 1000; } int64_t TimeSystem::SysNowServerMilliseconds() { return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count(); } int64_t TimeSystem::SysNowServerSeconds() { return SysNowServerMilliseconds() / 1000; } int32_t TimeSystem::DayZero() { time_t now_second = NowServerSeconds(); //24*3600=86400 int32_t sec = now_second % 86400; return now_second - sec; } // 刷新更新时间 void TimeSystem::RefreshLastTime() { int64_t now_time = OperatingSystemRunTime(); DeltaTime = now_time - m_last_time; if (DeltaTime < 0) { //时间回调, DeltaTime可能为负了 DeltaTime = 0; } m_last_time = now_time; } //操作系统已运行时间(修改电脑时钟不会影响操作系统已运行时间) int64_t TimeSystem::OperatingSystemRunTime() { return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now().time_since_epoch()).count(); } //设置自定义时间 void TimeSystem::SetUserTime(int32_t now) { if (now == 0) { //还原使用系统时间 m_user_add_time = SysNowServerMilliseconds() - OperatingSystemRunTime(); } else { m_user_add_time = now; m_user_add_time *= 1000; int64_t relative = OperatingSystemRunTime(); m_user_add_time -= relative; } }