UTC DateTime
A datetime implementation constraint to UTC.
Goal
The goal is to create datetime type, which unlike DateTime
guarantees to be
UTC only, without ignoring the existence of timezones like a NaiveDateTime
.
A secondary goal is to be more efficient or at least on par with
the build in datetimes. (DateTime
, NaiveDateTime
)
In practice the goal is to use less memory and
perform common [shared] actions faster.
Quick Setup
iex> UTCDateTime.utc_now
~Z[2019-12-14 16:08:13.042407]
iex> UTCDateTime.from_rfc3339!("2019-12-14T16:08:13.042407+01:00")
~Z[2019-12-14 15:08:13.042407]
iex> UTCDateTime.from_iso8601!("2019-12-14 16:08:13.042407")
~Z[2019-12-14 16:08:13.042407]
Installation
The package can be installed
by adding utc_datetime
to your list of dependencies in mix.exs
:
def deps do
[
{:utc_datetime, "~> 0.0.13"}
]
end
The docs can be found at https://hexdocs.pm/utc_datetime.
Integration
Ecto
Integrates with Ecto as a timestamp type.
Example:
defmodule User do
use Ecto.Schema
@timestamps_opts [type: UTCDateTime]
schema "users" do
field :name, :string
timestamps()
end
...
or alternatively
schema "users" do
field :name, :string
timestamps(type: UTCDateTime)
end
The UTCDateTime.USec
is also available and will hold microsecond
precision timestamps.
Jason
Integrates with Jason and
supports out of the box encoding almost twice as fast as the build in DateTime
and NaiveDateTime
.
Example:
iex> Jason.encode!(%{created_at: ~Z[2019-12-16 00:00:12.068421]})
"{\"created_at\":\"2019-12-16T00:00:12.068421Z\"}"
TimeMachinex
Integrates with TimeMachinex and can be used through TimeMachinex.utc_now/1
.
Example:
iex> TimeMachinex.utc_now
~Z[2019-12-16 00:00:12.068421]
Changelog
v0.0.13 (2020-01-13)
Fixes:
- Ecto type improve dump in case it is already a
DateTime
.
v0.0.12 (2020-01-08)
Fixes:
- Ecto conditional compile fix.
v0.0.11 (2020-01-07)
Fixes:
- Ecto passes
NaiveDateTime
even when usingutc_datetime
.
v0.0.10 (2020-01-06)
New Features:
UTCDateTime.USec
Ecto type.
v0.0.9 (2019-12-20)
New Features:
from_unix/1
,from_unix/2
to_epoch/2
,to_epoch/3
to_ntfs/1
,to_ntfs/2
to_unix/1
,to_unix/2
v0.0.8 (2019-12-20)
New Features:
add/2
,add/3
diff/2
,diff3
Fixes:
- Allow negative years in ISO 8601.
Cleanup:
truncate/2
v0.0.7 (2019-12-16)
New Features:
truncate/2
v0.0.6 (2019-12-15)
New Features:
- Jason [encoding] integration.
v0.0.5 (2019-12-15)
New Features:
- Ecto type integration.
v0.0.4 (2019-12-15)
New Features:
compare/2
from_date/2
from_erl/2
,from_erl!/2
to_date/2
to_erl/1
to_time/2
v0.0.3 (2019-12-15)
New Features:
- Epochs
v0.0.2 (2019-12-15)
New Features:
~Z
sigil forUTCDateTime
from_iso8601/1
,from_iso8601!/1
(ISO 8601:2004)from_rfc3339/1
,from_rfc3339!/1
(RFC 3339)to_iso8601/1
(ISO 8601:2004)to_rfc3339/1
(RFC 3339)to_string/1
(includingString.Chars
protocol)
v0.0.1 (2019-12-14)
Base UTCDateTime
.
New Features:
from_datetime/1
from_naive/1
to_datetime/1
,to_datetime/2
to_naive/1
,to_naive/2
utc_now/0
Experimental:
~Z
sigil forUTCDateTime
- RFC3339 support
Additional:
- Benchmarks
- Roadmap
Roadmap
Integrations
:fixtures
Release 0.0.14
to_local_datetime/1
(in caller)
Release 0.0.15
from_human/1
best effort parse
Copyright and License
Copyright (c) 2019, Ian Luites.
UTCDateTime code is licensed under the MIT License.