# struct Time::Instant

- Time::Instant
- Struct
- Value
- Object

##
Overview

`Time::Instant` represents a reading of a monotonic non-decreasing clock for the purpose of measuring elapsed time or timing an event in the future.

Instants are opaque values that have no public constructor or raw accessors by default. They can only be obtained from the clock (`Time.instant`) and compared to one another. The only useful values are differences between readings, represented as `Time::Span`.

##
Clock properties

Clock readings are guaranteed, barring platform bugs, to be no less than any previous reading (monotonic clock).

The measurement itself is expected to be fast (low latency) and precise within nanosecond resolution. This means it might not provide the best available accuracy for long-term measurements.

The clock is not guaranteed to be steady. Ticks of the underlying clock might vary in length. The clock may jump forwards or experience time dilation. But it never goes backwards.

The clock is expected to tick while the system is suspended. But this cannot be guaranteed on all platforms.

The clock is only guaranteed to apply to the current process. In practice, it is usually relative to system boot, so should be interchangeable between processes. But this is not guaranteed on all platforms.

##
Example

    start = Time.instant
    # do something
    elapsed = start.elapsed

`Time.measure(&)` is a convenient alternative for measuring elapsed time of an individual code block.

##
Included Modules

- Comparable(Time::Instant)

##
Defined in:

time/instant.cr

##
Instance Method Summary

- #+(other : Time::Span) : self
- #-(other : self) : Time::Span
- #-(other : Time::Span) : self
- #<=>(other : self) : Int32
- #duration_since(other : self) : Time::Span

  Returns the duration between `other` and `self`.

- #elapsed : Time::Span

  Returns the amount of time elapsed since `self`.

### Instance methods inherited from module `Comparable(Time::Instant)`

<(other : T) : Bool <, <=(other : T) <=, <=>(other : T) <=>, ==(other : T) ==, >(other : T) : Bool >, >=(other : T) >=, clamp(min, max)
clamp(range : Range) clamp

### Instance methods inherited from struct `Struct`

==(other : YAML::Any)
==(other) : Bool ==, hash(hasher) hash, inspect(io : IO) : Nil inspect, pretty_print(pp) : Nil pretty_print, to_s(io : IO) : Nil to_s

### Class methods inherited from struct `Struct`

pre_initialize(address : Pointer) : Nil pre_initialize

### Instance methods inherited from struct `Value`

==(other : Log::Metadata::Value)
==(other : JSON::Any)
==(other : YAML::Any)
==(other) ==, dup dup

### Instance methods inherited from class `Object`

! : Bool !, !=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other) ===, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash hash, in?(collection : Object) : Bool
in?(*values : Object) : Bool in?, inspect(io : IO) : Nil
inspect : String inspect, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String to_json, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil to_pretty_json, to_s(io : IO) : Nil
to_s : String to_s, to_yaml(io : IO) : Nil
to_yaml : String to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as

### Class methods inherited from class `Object`

from_json(string_or_io : String | IO, root : String)
from_json(string_or_io : String | IO) from_json, from_yaml(string_or_io : String | IO) from_yaml

### Macros inherited from class `Object`

class_getter(*names, &block) class_getter, class_getter!(*names) class_getter!, class_getter?(*names, &block) class_getter?, class_property(*names, &block) class_property, class_property!(*names) class_property!, class_property?(*names, &block) class_property?, class_setter(*names) class_setter, def_clone def_clone, def_equals(*fields) def_equals, def_equals_and_hash(*fields) def_equals_and_hash, def_hash(*fields) def_hash, delegate(*methods, to object) delegate, forward_missing_to(delegate) forward_missing_to, getter(*names, &block) getter, getter!(*names) getter!, getter?(*names, &block) getter?, property(*names, &block) property, property!(*names) property!, property?(*names, &block) property?, setter(*names) setter

##
Instance Method Detail

def +(other : Time::Span) : self #
def -(other : self) : Time::Span #
def -(other : Time::Span) : self #
def <=>(other : self) : Int32 #
def duration_since(other : self) : Time::Span #

Returns the duration between `other` and `self`.

The resulting duration is positive or zero.

def elapsed : Time::Span #

Returns the amount of time elapsed since `self`.

The resulting duration is positive or zero.