shijith.k

shijith.k

I have a DateTime with me, #DateTime<2019-11-10 13:27:00.0Z> and want to replace the time part of the DateTime struct with another time, say, 11:50:07.00+02:30. The solution I found was to convert the DateTime to string and then replace the time part using String.replace/3.
This is how my code looks.

dt = #DateTime<2019-11-11 13:27:00.0Z>
dt
 |> DateTime.to_string()
 |> String.replace(~r/[[:blank:]][[:alnum:]][[:alnum:]]:[[:alnum:]][[:alnum:]]:[[:alnum:]][[:alnum:]].[[:alnum:]]Z/, "T11:50:07.00+02:30")
 |> DateTime.from_iso8601()

I feel there is a better way to do this, or at least there is a better regex to do it.
Does anyone have any better logic?

Showing Posts 1 to 2

mudasobwa

mudasobwa

Creator of Cure

I would go with the direct struct update.

with {:ok, dt, 0} <- DateTime.from_iso8601("2019-11-10 13:27:00.0Z"),
     {:ok, t} <- Time.from_iso8601("11:50:07.00+02:30"),
  do: %DateTime{dt | hour: t.hour, minute: t.minute,
                     second: t.second, microsecond: t.microsecond}
#⇒ ~U[2019-11-10 11:50:07.00Z]

The above would discard the offset, though, and there is no clean way to get the offset in the Time struct because generally speaking the offset [arguably] has a meaning for the dates only. The below would be probable better:

date =
  DateTime.from_iso8601("2019-11-10 13:27:00.0Z")
  |> elem(1)
  |> DateTime.to_date()
  |> Date.to_iso8601()
DateTime.from_iso8601(date <> " 11:50:07.00+02:30")                      
#⇒ {:ok, ~U[2019-11-10 09:20:07.00Z], 9000}
shijith.k

shijith.k OP

The above would discard the offset

I can’t discard the offset, because after replacing the time, I still need to convert this to UTC.

date =
DateTime.from_iso8601(“2019-11-10 13:27:00.0Z”)
|> elem(1)
|> DateTime.to_date()
|> Date.to_iso8601()
DateTime.from_iso8601(date <> " 11:50:07.00+02:30")
#⇒ {:ok, ~U[2019-11-10 09:20:07.00Z], 9000}

So, for me, this is the suitable option. And its a much better and cleaner code than mine :smile:

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews