llarp/util/time.hpp

Namespaces

Name
llarp
[crypto.hpp]
std::chrono_literals

Types

Name
using timespec llarp_timespec

Types Documentation

using llarp_timespec

using llarp_timespec =  timespec;

Source code

#pragma once

#include "types.hpp"
#include <iostream>
#include <fmt/format.h>
#include <fmt/chrono.h>

#ifdef __linux__
#include <linux/time_types.h>
using llarp_timespec = __kernel_timespec;
#else
#include <ctime>
using llarp_timespec = timespec;
#endif

using namespace std::chrono_literals;

namespace llarp
{
  Duration_t
  time_now_ms();

  Duration_t
  uptime();

  llarp_timespec as_timespec(Duration_t);

  timespec to_timespec(Duration_t);

  uint64_t
  ToMS(Duration_t duration);

  // Returns a string such as "27m13s ago" or "in 1h12m" or "now".  You get precision of minutes
  // (for >=1h), seconds (>=10s), or milliseconds.  The `now_threshold` argument controls how close
  // to current time (default 1s) the time has to be to get the "now" argument.
  std::string
  short_time_from_now(const TimePoint_t& t, const Duration_t& now_threshold = 1s);

  // Makes a duration human readable.  This always has full millisecond precision, but formats up to
  // hours. E.g. "-4h04m12.123s" or "1234h00m09.876s.
  std::string
  ToString(Duration_t t);

}  // namespace llarp

// Duration_t is currently just a typedef to std::chrono::milliseconds, and specializing
// that seems wrong; leaving this here to remind us not to add it back in again.
// namespace fmt
//{
//  template <>
//  struct formatter<llarp::Duration_t>
//  {
//  };
//}  // namespace fmt

Updated on 2026-01-10 at 22:49:46 +0000