Struct prost_types::Timestamp [−][src]
A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See https://www.ietf.org/rfc/rfc3339.txt.
Examples
Example 1: Compute Timestamp from POSIX time().
Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
Example 2: Compute Timestamp from POSIX gettimeofday().
struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
Example 3: Compute Timestamp from Win32 GetSystemTimeAsFileTime().
FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
Example 4: Compute Timestamp from Java System.currentTimeMillis().
long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
Example 5: Compute Timestamp from current time in Python.
timestamp = Timestamp() timestamp.GetCurrentTime()
JSON Mapping
In JSON format, the Timestamp type is encoded as a string in the RFC 3339 format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required, though only UTC (as indicated by "Z") is presently supported.
For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017.
In JavaScript, one can convert a Date object to this format using the
standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString]
method. In Python, a standard datetime.datetime object can be converted
to this format using strftime
with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
can use the Joda Time's ISODateTimeFormat.dateTime()
to obtain a formatter capable of generating timestamps in this format.
Fields
seconds: i64
Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
nanos: i32
Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
Trait Implementations
impl Message for Timestamp[src]
impl Message for Timestampfn encode_raw<B>(&self, buf: &mut B) where
B: BufMut, [src]
fn encode_raw<B>(&self, buf: &mut B) where
B: BufMut, fn merge_field<B>(&mut self, buf: &mut B) -> Result<(), DecodeError> where
B: Buf, [src]
fn merge_field<B>(&mut self, buf: &mut B) -> Result<(), DecodeError> where
B: Buf, fn encoded_len(&self) -> usize[src]
fn encoded_len(&self) -> usizeReturns the encoded length of the message without a length delimiter.
fn clear(&mut self)[src]
fn clear(&mut self)Clears the message, resetting all fields to their default.
fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError> where
B: BufMut, [src]
fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError> where
B: BufMut, Encodes the message to a buffer. Read more
fn encode_length_delimited<B>(&self, buf: &mut B) -> Result<(), EncodeError> where
B: BufMut, [src]
fn encode_length_delimited<B>(&self, buf: &mut B) -> Result<(), EncodeError> where
B: BufMut, Encodes the message with a length-delimiter to a buffer. Read more
fn decode<B>(buf: B) -> Result<Self, DecodeError> where
B: IntoBuf,
Self: Default, [src]
fn decode<B>(buf: B) -> Result<Self, DecodeError> where
B: IntoBuf,
Self: Default, Decodes an instance of the message from a buffer. Read more
fn decode_length_delimited<B>(buf: B) -> Result<Self, DecodeError> where
B: IntoBuf,
Self: Default, [src]
fn decode_length_delimited<B>(buf: B) -> Result<Self, DecodeError> where
B: IntoBuf,
Self: Default, Decodes a length-delimited instance of the message from the buffer.
fn merge<B>(&mut self, buf: B) -> Result<(), DecodeError> where
B: IntoBuf, [src]
fn merge<B>(&mut self, buf: B) -> Result<(), DecodeError> where
B: IntoBuf, Decodes an instance of the message from a buffer, and merges it into self. Read more
fn merge_length_delimited<B>(&mut self, buf: B) -> Result<(), DecodeError> where
B: IntoBuf, [src]
fn merge_length_delimited<B>(&mut self, buf: B) -> Result<(), DecodeError> where
B: IntoBuf, Decodes a length-delimited instance of the message from buffer, and merges it into self. Read more
impl Default for Timestamp[src]
impl Default for Timestampimpl Debug for Timestamp[src]
impl Debug for Timestampfn fmt(&self, f: &mut Formatter) -> Result[src]
fn fmt(&self, f: &mut Formatter) -> ResultFormats the value using the given formatter. Read more
impl Clone for Timestamp[src]
impl Clone for Timestampfn clone(&self) -> Timestamp[src]
fn clone(&self) -> TimestampReturns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)1.0.0[src]
fn clone_from(&mut self, source: &Self)Performs copy-assignment from source. Read more
impl PartialEq for Timestamp[src]
impl PartialEq for Timestampfn eq(&self, other: &Timestamp) -> bool[src]
fn eq(&self, other: &Timestamp) -> boolThis method tests for self and other values to be equal, and is used by ==. Read more
fn ne(&self, other: &Timestamp) -> bool[src]
fn ne(&self, other: &Timestamp) -> boolThis method tests for !=.
impl From<SystemTime> for Timestamp[src]
impl From<SystemTime> for TimestampConverts a std::time::SystemTime to a Timestamp.
fn from(time: SystemTime) -> Timestamp[src]
fn from(time: SystemTime) -> TimestampPerforms the conversion.
impl From<Timestamp> for Result<SystemTime, Duration>[src]
impl From<Timestamp> for Result<SystemTime, Duration>Converts a Timestamp to a SystemTime, or if the timestamp falls before the Unix epoch, a
duration containing the difference.