class documentation

A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one.

All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a 24-hour linear smear.

The 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.

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 Java Instant.now().

Instant now = Instant.now();

Timestamp timestamp =
    Timestamp.newBuilder().setSeconds(now.getEpochSecond())
        .setNanos(now.getNano()).build();

Example 6: 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. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset).

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() 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.

Method __init__ Create a message from a source message and field values.
Method nanos.setter Set or clear the generated nanos field.
Method seconds.setter Set or clear the generated seconds field.
Property nanos Non-negative fractions of a second at nanosecond resolution. This field is the nanosecond portion of the duration, not an alternative to seconds. Negative second values with fractions must still have non-negative nanos values that count forward in time...
Property seconds Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be between -315576000000 and 315576000000 inclusive (which corresponds to 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z).

Inherited from Message:

Class Method from_json Create a message from protobuf JSON mapping.
Class Method FromString Create a message by parsing protobuf wire-format bytes.
Class Method get_descriptor Return the message descriptor from the registry.
Class Method is_credentials Return True if a Python field contains credentials.
Class Method is_sensitive Return True if a Python field has the sensitive annotation.
Method __dir__ List generated fields, oneofs, and nested declarations.
Method __repr__ Render non-default fields without disclosing annotated secrets.
Method ByteSize Return the serialized protobuf wire size in bytes.
Method check_presence Check presence using a generated Python field name.
Method Clear Clear all fields, extensions, unknown fields, and the reset mask.
Method clear_extension Clear an extension value.
Method ClearField Clear a protobuf field or oneof and record it in the reset mask.
Method CopyFrom Replace this message with an independent copy of another message.
Method FindInitializationErrors Return paths of missing required fields.
Method get_extension Return an extension value.
Method get_full_update_reset_mask Create a reset mask from the current protobuf state.
Method get_mask Return the reset mask for field changes.
Method has_extension Return True if an extension has explicit presence.
Method HasField Return True if a protobuf field or oneof has explicit presence.
Method is_default Return True if a generated field has its default value.
Method IsInitialized Return True if every required field is initialized.
Method MergeFrom Merge fields from another message of the same generated type.
Method MergeFromString Merge protobuf wire-format bytes into this message.
Method ParseFromString Parse protobuf wire-format bytes and replace this message.
Method SerializeToString Serialize the message using protobuf wire format.
Method set_extension Set an extension value.
Method set_mask Set the reset mask for this message.
Method to_json Serialize this message using protobuf JSON mapping.
Method which_field_in_oneof Return the selected Python field name for a protobuf oneof.
Method WhichOneof Return the selected protobuf field name for a oneof.
Constant __DEPRECATION_DETAILS__ Undocumented
Constant __EXTENSION_REGISTRY__ Registry that decodes protobuf extensions.
Constant __FIELDS__ Runtime field data that the generator creates.
Constant __MAX_NESTING_DEPTH__ Maximum protobuf nesting depth for serialization, parsing, and initialization checks.
Constant __PB2_DESCRIPTOR__ Alias for code that expects a protobuf descriptor.
Constant __PROTO_DESCRIPTOR__ Message descriptor from the registry.
Constant __PY_TO_PB2__ Mapping from Python names to protobuf names.
Constant __REGISTRY__ Registry for the message and its descriptor.
Class Variable __PROTO_FULL_NAME__ Fully qualified protobuf message name.
Property Extensions Provide protobuf-compatible mapping access to extension values.
Class Method _fields_by_number Undocumented
Class Method _fields_by_proto_name Undocumented
Class Method _fields_by_python_name Undocumented
Class Method _from_string Deserialize internally without invoking generated user warnings.
Class Method _oneof_python_name Undocumented
Class Method _public_fields_by_proto_name Undocumented
Class Method _public_fields_by_python_name Undocumented
Static Method _format_map_key Undocumented
Static Method _repr_field Undocumented
Method _bind_child Undocumented
Method _bind_mutation Undocumented
Method _check_same_type Undocumented
Method _child_changed Undocumented
Method _clear_state Undocumented
Method _closed_enum_unknown Undocumented
Method _converted_view Undocumented
Method _decode_map_entry Undocumented
Method _detach_child Undocumented
Method _field_has_value Undocumented
Method _field_is_default Undocumented
Method _find_initialization_errors Undocumented
Method _get_field Undocumented
Method _initialize Initialize message state, optionally suppressing generated warnings.
Method _map Undocumented
Method _merge_from_string Undocumented
Method _nesting_limit Undocumented
Method _notify Undocumented
Method _record_reset Undocumented
Method _repeated Undocumented
Method _select Undocumented
Method _serialize_to_string Undocumented
Method _set_field Undocumented
Method _suspend_mutation Undocumented
Method _suspend_reset_mask Undocumented
Method _try_decode_field Undocumented
Method _write_field Undocumented
Instance Variable _extensions Undocumented
Instance Variable _mutation_suspended Undocumented
Instance Variable _on_mutation Undocumented
Instance Variable _oneofs Undocumented
Instance Variable _present Undocumented
Instance Variable _reset_mask Undocumented
Instance Variable _reset_mask_suspended Undocumented
Instance Variable _unknown_fields Undocumented
Instance Variable _values Undocumented
Instance Variable _views Undocumented
def __init__(self, initial_message: SerializableMessage | None = None, *, seconds: int | None | UnsetType = ..., nanos: int | None | UnsetType = ...): (source)

Create a message from a source message and field values.

@nanos.setter
def nanos(self, value: int | None): (source)

Set or clear the generated nanos field.

@seconds.setter
def seconds(self, value: int | None): (source)

Set or clear the generated seconds field.

Non-negative fractions of a second at nanosecond resolution. This field is the nanosecond portion of the duration, not an alternative to seconds. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be between 0 and 999,999,999 inclusive.

Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be between -315576000000 and 315576000000 inclusive (which corresponds to 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z).