Function zebra_chain::serialization::arbitrary::datetime_full

source ·
pub fn datetime_full() -> impl Strategy<Value = DateTime<Utc>>
Expand description

Returns a strategy that produces an arbitrary chrono::DateTime<Utc>, based on the full valid range of the type.

Both the seconds and nanoseconds values are randomised, including leap seconds: https://docs.rs/chrono/0.4.19/chrono/naive/struct.NaiveTime.html#leap-second-handling

Wherever possible, Zebra should handle leap seconds by:

  • making durations and intervals 3 seconds or longer,
  • avoiding complex time-based calculations, and
  • avoiding relying on subsecond precision or time order. When monotonic times are needed, use the opaque std::time::Instant type.

§Usage

Zebra uses these times internally, typically via Utc::now.

Some parts of the Zcash network protocol (Version messages) also use times with an 8-byte seconds value. Unlike this function, they have zero nanoseconds values. (So they never have chrono leap seconds.)