# Date & Time
[](https://github.com/lukesneeringer/datetime-rs/actions/workflows/ci.yaml)
[](https://codecov.io/gh/lukesneeringer/datetime-rs)
[](https://crates.io/crates/datetime-rs)
[](https://docs.rs/datetime-rs/latest/datetime/)
The `datetime` crate provides a simple, easy-to-use `DateTime` struct (and corresponding macro).
DateTime provides storage for a date and time, and optionally a time zone (if the `tz` feature is
enabled).
The underlying storage is a Unix timestamp, so `DateTime` objects are comparable (even when in
different time zones). Additonally, if you don't need the concept of time zones (e.g. because you
can assume one), you can leave the `tz` feature off and not take the baggage.
A `DateTime` with no time zone specified behaves identically to UTC.
## Examples
Making a `DateTime`:
```rs
use datetime::DateTime;
let dt = DateTime::ymd(2012, 4, 21).hms(11, 0, 0).build();
```
You can also use the `datetime!` macro to get a syntax resembling a date literal:
```rs
use datetime::datetime;
let dt = datetime! { 2012-04-21 11:00:00 };
```
## Features
`datetime-rs` ships with the following features:
- **`diesel-pg`**: Enables interop with PostgreSQL `TIMESTAMP` columns using Diesel.
- **`log`**: Adds a `log::kv::ToValue` implementation.
- **`serde`**: Enables serialization and desearialization with `serde`. _(Enabled by default.)_
- **`tz`**: Enables support for time-zone-aware date construction.