kostonstyle

kostonstyle

Create time with one hour plus

Hi all

I want to have a unix time, from the current time plus 1 hour.

DateTime.now + 1 hour

How to get it in elixir?

Thanks

Marked As Solved

h4cc

h4cc

Have a look at the library timex: https://github.com/bitwalker/timex

> Timex.shift(datetime, hours: 2, minutes: 13)

Also Liked

m31271n

m31271n

Elixir provides DateTime.add since 1.8, you can add seconds directly like this:

DateTime.utc_now() |> DateTime.add(3600, :second)
14
Post #5
aseigo

aseigo

Just to add some random thoughts: this specific thing can be done easily enough without a dependency if your needs are very simple ->

DateTime.to_unix(DateTime.utc_now()) + 60*60

… but yeah, just use Timex :wink: Dates and times are amazingly difficult to get Right™ when you are dealing with timezones, quirks like daylight savings, need better-than-second resolution etc. If you need a simple timestamp in a single arbitrary timezone where a second here or there doesn’t particularly matter, not a big deal. If you need anything remotely more than that, use the libraries available.

adamu

adamu

It’s worth mentioning that adding 3600 seconds might not get you what you want.

iex(1)> DateTime.new!(~D[2022-10-30], ~T[00:00:00], "Europe/London") |> DateTime.add(3600)
#DateTime<2022-10-30 01:00:00+01:00 BST Europe/London>
iex(2)> DateTime.new!(~D[2022-10-30], ~T[00:00:00], "Europe/London") |> DateTime.add(3600 * 2)
#DateTime<2022-10-30 01:00:00+00:00 GMT Europe/London>

In this case, 01:00 happens twice due to daylight savings.

If you were just trying to schedule something to happen one hour later, that’s fine, but if you wanted the semantic meaning of the next hour on the clock, you need to choose which one, and Elixir will tell you so:

iex(3)> DateTime.new(~D[2022-10-30], ~T[01:00:00], "Europe/London")
{:ambiguous, #DateTime<2022-10-30 01:00:00+01:00 BST Europe/London>,
 #DateTime<2022-10-30 01:00:00+00:00 GMT Europe/London>}

Even when calculating with seconds, there are leap seconds to worry about, which the default calendar does not handle. For example, there was a leap second on 2016-12-31 23:59:60Z but Calendar.ISO does not know about it:

iex(4)> ~U[2016-12-31 23:59:60Z]
** (ArgumentError) cannot parse "2016-12-31 23:59:60Z" as UTC DateTime for Calendar.ISO, reason: :invalid_time
mjs2600

mjs2600

:thumbsup: Timex is the answer here. If you want the Unix time from an Elixir DateTime, you can use DateTime.to_unix/1.

Where Next?

Popular in Questions Top

lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
chrisalley
ExUnit now has describe blocks which is a welcome addition coming from RSpec. In the docs, it states that nested hierarchies of describe ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
LegitStack
I’m hoping you guys can give me some general advice and perhaps code examples if you’re feeling up to it. I’m very interested in Elixir,...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
New
lk-geimfari
What is most correct way to open, read and parse JSON file with poison? For example if we have example.json file in root of some projec...
New
lucidguppy
I have a super simple question about elixir - how would I take a file like this foo bar baz and output a new file that enumerates th...
New

Other popular topics Top

belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
quazar
How to set Jason to encode all fields in ecto schema, I don’t care about security and implementing only is taking long list of attributes...
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New

We're in Beta

About us Mission Statement