EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
utils_time.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  EvE::TimeParts
 

Namespaces

 EvE
 
 EvE::Time
 

Enumerations

enum  : int64_t {
  EvE::Time::mSecond = 1000L, EvE::Time::Second = 10000000L, EvE::Time::Minute = (Second * 60L), EvE::Time::Hour = (Minute * 60L),
  EvE::Time::Day = (Hour * 24L), EvE::Time::Week = (Day * 7L), EvE::Time::Month = (Day * 30L), EvE::Time::Year = (Day * 365L)
}
 

Functions

int64 UnixTimeToWin32Time (time_t sec, uint32 nsec)
 
int64 Win32TimeNow ()
 
void Win32TimeToUnixTime (int64 win32t, time_t &unix_time, uint32 &nsec)
 
std::string Win32TimeToString (int64 win32t)
 
int32 GetElapsedHours (int64 time)
 
double GetFileTimeNow ()
 
int64 GetSteadyTime ()
 
double GetTimeMSeconds ()
 
double GetTimeUSeconds ()
 
std::string GetUTimeTillNow (double fromTime)
 
std::string GetMTimeTillNow (double fromTime)
 
const std::string currentDateTime ()
 
EvE::TimeParts GetTimeParts (int64 filetime=0)
 

Variables

const int64 Win32Time_Second
 
const int64 Win32Time_Minute
 
const int64 Win32Time_Hour
 
const int64 Win32Time_Day
 
const int64 Win32Time_Month
 
const int64 Win32Time_Year
 

Function Documentation

const std::string currentDateTime ( )

Definition at line 125 of file utils_time.cpp.

Referenced by main().

125  {
126  time_t now = std::time(0);
127  struct tm tstruct;
128  char buf[80];
129  tstruct = *std::localtime(&now);
130  // Visit http://en.cppreference.com/w/cpp/chrono/c/strftime
131  // for more information about date/time format
132  std::strftime(buf, sizeof(buf), "%Y-%m-%d.%X", &tstruct);
133 
134  return buf;
135 }

Here is the caller graph for this function:

int32 GetElapsedHours ( int64  time)

Definition at line 75 of file utils_time.cpp.

References GetFileTimeNow(), SECS_BETWEEN_EPOCHS, and SECS_TO_100NS.

76 {
77  double hours = GetFileTimeNow() -time;
78  hours /= SECS_TO_100NS;
79  hours -= SECS_BETWEEN_EPOCHS;
80  hours /= 3600;
81  return (int32)hours;
82 }
signed __int32 int32
Definition: eve-compat.h:49
static const int64 SECS_TO_100NS
Definition: utils_time.cpp:36
static const int64 SECS_BETWEEN_EPOCHS
Definition: utils_time.cpp:35
double GetFileTimeNow()
Definition: utils_time.cpp:84

Here is the call graph for this function:

double GetFileTimeNow ( )

Definition at line 84 of file utils_time.cpp.

References GetTimeMSeconds(), EvE::Time::Second, and SECS_BETWEEN_EPOCHS.

Referenced by GPSTransportClosed::_CreateKeywords(), Character::_Load(), CachedObjectMgr::_UpdateCache(), Concord::_UpdateDamage(), StructureSE::Activate(), AttributeMap::Add(), AllianceDB::AddBulletin(), CorporationDB::AddBulletin(), AllianceDB::AddEmployment(), CharacterDB::AddEmployment(), CorporationDB::AddItemEvent(), AccountDB::AddJournalEntry(), FleetService::AddMember(), CorporationDB::AddRoleHistory(), SovereigntyDB::AddSovereigntyData(), Character::AddToSkillQueue(), DestinyManager::AttemptDockOperation(), PyServiceMgr::BindObject(), Character::CancelSkillInTraining(), AttributeMap::Change(), Command_giveskill(), CorporationDB::CreateAdvert(), AllianceDB::CreateAlliance(), Colony::CreateCommandPin(), FleetService::CreateFleet(), CorporationDB::CreateMedal(), CorporationDB::CreateMemberAttributeUpdate(), MissionDataMgr::CreateMissionOffer(), Colony::CreatePin(), StructureSE::Deactivate(), Skill::GetCurrentSP(), GetElapsedHours(), PIDataMgr::GetProgramOutput(), Skill::GetRemainingSP(), Skill::GetTrainingTime(), CorporationDB::GiveMedalToCharacters(), Character::GrantCertificate(), EntityList::Initialize(), Character::InjectSkillIntoBrain(), AllianceDB::InsertApplication(), ShipDB::InsertInsuranceByShipID(), FactoryDB::InstallJob(), Colony::InstallProgram(), CustomsSE::Killed(), StructureSE::Killed(), ShipSE::Killed(), Colony::LaunchCommodities(), Colony::Load(), MissionDB::LoadClosedOffers(), Character::LoadPausedSkillQueue(), Colony::LoadPlants(), Concord::MakeDamageState(), Missile::MakeDamageState(), DroneSE::MakeDamageState(), ProbeSE::MakeDamageState(), CargoContainer::MakeDamageState(), AsteroidSE::MakeDamageState(), CelestialSE::MakeDamageState(), ContainerSE::MakeDamageState(), SystemEntity::MakeDamageState(), ShipSE::MakeDamageState(), ItemSystemEntity::MakeDamageState(), ObjectSystemEntity::MakeDamageState(), DynamicSystemEntity::MakeDamageState(), Agent::MakeOffer(), SystemManager::ManipulateTimeData(), MarketMgr::NeedsUpdate(), CharacterDB::NewCharacter(), Character::OnlineTime(), Colony::PlanetXfer(), InventoryItem::Populate(), CharacterDB::PrepareCharacterForDelete(), ProbeSE::ProbeSE(), MissionDataMgr::Process(), Client::ProcessClient(), Colony::ProcessECUs(), Colony::ProcessPlants(), NPCMarket::ProcessStation(), CustomsSE::PullAnchor(), StructureSE::PullAnchor(), MarketDB::RecordTransaction(), CharacterDB::ReportRespec(), Scan::RequestScans(), EntityList::ResetStartTime(), PlanetDB::SaveLaunch(), BookmarkDB::SaveNewBookmark(), StandingDB::SaveStandingChanges(), ManagerDB::SaveStatisticData(), DestinyManager::SendAnchorDrop(), DestinyManager::SendAnchorLift(), SystemEntity::SendDamageStateChanged(), CustomsSE::SendEffectUpdate(), StructureSE::SendEffectUpdate(), DestinyManager::SendSpecialEffect(), ProbeSE::SendWarpStart(), CustomsSE::SetAnchor(), StructureSE::SetAnchor(), CharacterDB::SetLogInTime(), CharacterDB::SetLogOffTime(), TCUSE::SetOnline(), ModuleItem::SetOnline(), TowerSE::SetOnline(), StructureSE::SetOperating(), Colony::SetProgramResults(), Colony::SetSchematic(), ActiveModule::ShowEffect(), Character::SkillQueueLoop(), Scan::SystemScanStarted(), Colony::TransferCommodities(), Colony::Update(), CorporationDB::UpdateAdvert(), AllianceDB::UpdateCorpAlliance(), ObjectSystemEntity::UpdateDamage(), DynamicSystemEntity::UpdateDamage(), MarketMgr::UpdatePriceHistory(), Inventory::ValidateIHubUpgrade(), RamMethods::VerifyCompleteJob(), and CharacterDB::VisitSystem().

85 {
86  // convert system time to filetime.
87  double time = GetTimeMSeconds();
88  time /= 1000; // to second
89  time += SECS_BETWEEN_EPOCHS; // offset
90  time *= EvE::Time::Second; // to 100 uSeconds
91  return time;
92 }
double GetTimeMSeconds()
Definition: utils_time.cpp:104
static const int64 SECS_BETWEEN_EPOCHS
Definition: utils_time.cpp:35

Here is the call graph for this function:

std::string GetMTimeTillNow ( double  fromTime)

Definition at line 148 of file utils_time.cpp.

References GetTimeMSeconds(), and sprintf().

149 {
150  double elapsed = GetTimeMSeconds() - fromTime;
151  if (elapsed > 999)
152  return sprintf("0.4fs",elapsed / 1000);
153  else
154  return sprintf("0.4fms",elapsed);
155 }
std::string sprintf(const char *fmt,...)
sprintf for std::string.
Definition: eve-compat.cpp:106
double GetTimeMSeconds()
Definition: utils_time.cpp:104

Here is the call graph for this function:

int64 GetSteadyTime ( )

Definition at line 95 of file utils_time.cpp.

Referenced by Timer::SetCurrentTime().

95  { // -allan
96  // simulation of Windows GetTickCount()
97  // this returns milliseconds
98  using namespace std::chrono;
99  auto duration = system_clock::now().time_since_epoch(); // return in nanoseconds
100  //int64 time = duration_cast<microseconds>(steady_clock::now().time_since_epoch()).count();
101  return duration_cast<milliseconds>(duration).count();
102 }

Here is the caller graph for this function:

double GetTimeMSeconds ( )

Definition at line 104 of file utils_time.cpp.

Referenced by PlanetDataMgr::_Populate(), PIDataMgr::_Populate(), DestinyManager::BeginMovement(), DestinyManager::Bounce(), DestinyManager::Follow(), ConsoleCommand::FxProc(), GetFileTimeNow(), GetMTimeTillNow(), PyServiceMgr::Initalize(), BulkDB::Initialize(), main(), DestinyManager::MoveObject(), FxDataMgr::Populate(), MapData::Populate(), MissionDataMgr::Populate(), SovereigntyDataMgr::Populate(), StationDataMgr::Populate(), MarketMgr::Populate(), DungeonDataMgr::Populate(), StaticDataMgr::Populate(), MapCon::PopulateConnections(), StructureSE::Process(), ShipItem::ProcessEffects(), ShipItem::ResetEffects(), ItemFactory::SaveItems(), Character::SkillQueueLoop(), DestinyManager::SpeedBoost(), DestinyManager::Stop(), DestinyManager::TractorBeamStart(), and DestinyManager::UpdateVelocity().

104  { // -allan
105  // this returns milliseconds in microsecond resolution
106  using namespace std::chrono;
107  /*
108  auto now = steady_clock::now();
109  duration_cast<microseconds>(steady_clock::now().time_since_epoch()).count();
110  */
111  auto duration = system_clock::now().time_since_epoch(); // return in nanoseconds
112  double time = duration_cast<microseconds>(duration).count();
113  return (time / 1000);
114 }

Here is the caller graph for this function:

EvE::TimeParts GetTimeParts ( int64  filetime = 0)

Definition at line 157 of file utils_time.cpp.

References EvE::TimeParts::day, daysOfMonth, EvE::TimeParts::dy, EvE::TimeParts::hour, EvE::TimeParts::min, EvE::TimeParts::month, EvE::TimeParts::ms, EvE::TimeParts::sec, EvE::Time::Second, SECS_BETWEEN_EPOCHS, EvE::TimeParts::wd, EvE::TimeParts::wn, and EvE::TimeParts::year.

Referenced by CalendarDB::SaveNewEvent(), and CalendarDB::SaveSystemEvent().

158 {
159  // time sent as (windows)FILETIME; convert to unix time
160  double time(filetime /EvE::Time::Second);// to Seconds
161  time -= SECS_BETWEEN_EPOCHS; // epoc offset
162 
163  // Calculate total days
164  uint16 day = (time / 86400) +1;
165  uint16 seconds = fmod(time, 86400);
166 
167  // year loop
168  uint16 year = 1970;
169  while (day >= 365) {
170  if ((year % 400 == 0)
171  or ((year % 4 == 0) and (year % 100 != 0))) {
172  day -= 366;
173  } else {
174  day -= 365;
175  }
176  ++year;
177  }
178 
179  bool flag(false);
180  if ((year % 400 == 0)
181  or ((year % 4 == 0) and (year % 100 != 0)))
182  flag = true;
183 
184  // Calculating MONTH and DATE
185  uint8 month(0), index(0);
186  if (flag) {
187  while (true) {
188  if (index == 1) {
189  if (day - 29 < 0)
190  break;
191  ++month;
192  day -= 29;
193  } else {
194  if (day -daysOfMonth[index] < 0)
195  break;
196  ++month;
197  day -= daysOfMonth[index];
198  }
199  ++index;
200  }
201  } else {
202  while (true) {
203  if (day -daysOfMonth[index] < 0)
204  break;
205  day -= daysOfMonth[index];
206  ++month;
207  ++index;
208  }
209  }
210 
211  // Current Month
212  if (day > 0) {
213  ++month;
214  } else {
215  if (month == 2 && flag)
216  day = 29;
217  else {
218  day = daysOfMonth[month - 1];
219  }
220  }
221 
222  // use boost to get day of week and week of year
223  boost::gregorian::date d(year, month, day);
224 
226  data.year = year;
227  data.month = month;
228  data.day = day;
229  data.wn = d.week_number();
230  data.wd = d.day_of_week();
231  data.dy = d.day_of_year();
232  data.hour = seconds / 3600;
233  data.min = fmod(seconds, 3600) / 60;
234  data.sec = fmod(fmod(seconds, 3600), 60);
235  data.ms = fmod(time, 1000);
236 
237  return data;
238 }
unsigned __int8 uint8
Definition: eve-compat.h:46
static const int daysOfMonth[]
Definition: utils_time.cpp:33
static const int64 SECS_BETWEEN_EPOCHS
Definition: utils_time.cpp:35
unsigned __int16 uint16
Definition: eve-compat.h:48

Here is the caller graph for this function:

std::string GetUTimeTillNow ( double  fromTime)

Definition at line 137 of file utils_time.cpp.

References GetTimeUSeconds(), and sprintf().

138 {
139  double elapsed = GetTimeUSeconds() - fromTime;
140  if (elapsed > 999999)
141  return sprintf("0.4fs",elapsed / 1000000);
142  else if (elapsed > 999)
143  return sprintf("0.4fms",elapsed / 1000);
144  else
145  return sprintf("0.4fus",elapsed);
146 }
std::string sprintf(const char *fmt,...)
sprintf for std::string.
Definition: eve-compat.cpp:106
double GetTimeUSeconds()
Definition: utils_time.cpp:116

Here is the call graph for this function:

int64 UnixTimeToWin32Time ( time_t  sec,
uint32  nsec 
)

Definition at line 45 of file utils_time.cpp.

References SECS_BETWEEN_EPOCHS, and SECS_TO_100NS.

Referenced by Win32TimeNow().

45  {
46  return(
48  + (nsec / 100)
49  );
50 }
static const int64 SECS_TO_100NS
Definition: utils_time.cpp:36
static const int64 SECS_BETWEEN_EPOCHS
Definition: utils_time.cpp:35
signed __int64 int64
Definition: eve-compat.h:51

Here is the caller graph for this function:

int64 Win32TimeNow ( )

Definition at line 70 of file utils_time.cpp.

References UnixTimeToWin32Time().

Referenced by APIAccountManager::_APIKeyRequest(), PyService::_BuildCachedReturn(), APIServiceManager::_BuildXMLHeader(), APIServiceManager::_CloseXMLHeader(), Client::_SendPingResponse(), SuperWeapon::_ShowCycle(), ItemSystemEntity::MakeSlimItem(), marshal_EVEMarshalTest(), PrintTimeNow(), LSCService::SendMail(), MailDB::SendMail(), SuperWeapon::StopCycle(), and WormholeSE::WormholeSE().

70  {
71  // returns second resolution.
72  return UnixTimeToWin32Time(std::time(NULL), 0);
73 }
int64 UnixTimeToWin32Time(time_t sec, uint32 nsec)
Definition: utils_time.cpp:45

Here is the call graph for this function:

Here is the caller graph for this function:

std::string Win32TimeToString ( int64  win32t)

Definition at line 59 of file utils_time.cpp.

References Win32TimeToUnixTime().

Referenced by APIAccountManager::_APIKeyRequest(), APIServiceManager::_BuildXMLHeader(), APICharacterManager::_CharacterSheet(), APIServiceManager::_CloseXMLHeader(), APICharacterManager::_SkillInTraining(), APICharacterManager::_SkillQueue(), PyLookupResolver::LookupInt(), and TimeToString().

59  {
60  std::time_t unix_time;
61  uint32 nsec = 0;
62  Win32TimeToUnixTime(win32t, unix_time, nsec);
63 
64  char buf[256];
65  std::strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", std::localtime(&unix_time));
66 
67  return buf;
68 }
unsigned __int32 uint32
Definition: eve-compat.h:50
void Win32TimeToUnixTime(int64 win32t, time_t &unix_time, uint32 &nsec)
Definition: utils_time.cpp:52

Here is the call graph for this function:

Here is the caller graph for this function:

void Win32TimeToUnixTime ( int64  win32t,
time_t &  unix_time,
uint32 nsec 
)

Definition at line 52 of file utils_time.cpp.

References SECS_BETWEEN_EPOCHS, and SECS_TO_100NS.

Referenced by Win32TimeToString().

52  {
53  win32t -= (SECS_BETWEEN_EPOCHS * SECS_TO_100NS);
54  nsec = (win32t % SECS_TO_100NS) * 100;
55  win32t /= SECS_TO_100NS;
56  unix_time = win32t;
57 }
static const int64 SECS_TO_100NS
Definition: utils_time.cpp:36
static const int64 SECS_BETWEEN_EPOCHS
Definition: utils_time.cpp:35

Here is the caller graph for this function:

Variable Documentation

const int64 Win32Time_Day
const int64 Win32Time_Hour

Definition at line 40 of file utils_time.cpp.

const int64 Win32Time_Minute

Definition at line 39 of file utils_time.cpp.

Referenced by APIServiceManager::_CloseXMLHeader().

const int64 Win32Time_Month

Definition at line 42 of file utils_time.cpp.

const int64 Win32Time_Second

Definition at line 38 of file utils_time.cpp.

const int64 Win32Time_Year

Definition at line 43 of file utils_time.cpp.