How to create custom Time with month and day name

Hello, Im using Timex lib in order to create custom time which I need. for example I need something like this:

"Mon, 29 Oct 2018 23:38:55 +0330"

and I did this like this:

iran_now_time = Timex.now("Iran")

"Mon, #{iran_now_time.day} Oct #{iran_now_time.year} #{iran_now_time.hour}:#{iran_now_time.minute}:#{iran_now_time.second} #{iran_now_time.zone_abbr}"

As you see, I did not successful to create month and day name ( day name of the Week = Mon and month name = Oct ). I wrote these like hard code right now.

how can I do these two things ?

Thanks

Why not just use Timex.format/2,3 instead? String munging sounds painful for that… o.O

2 Likes

Have you checked Timex.format/2?

I have no project available using :timex, but your requirement should be roughly achievable by the following format string: {WDshort}, {D} {Mshort} {YYYY} {h24]:{0m}:{0s} {Z}.

But to be honest, Just stick to one of the {ISO:*} variants and teach the world to read proper dates.

3 Likes

I have seen it, but I can’t use this because I don’t know how to write the cod I needed!!

I need the time like "Mon, 29 Oct 2018 23:38:55 +0330" for Email headers

for example:

    new_email(
      to: "#{info.email}",
      from: "noreply@name.com",
      subject: "#{info.subject}",
      headers: %{
        "From" => "noreply@name.com",
        "Return-Path" => "#{info.email}",
        "Subject" => "#{info.subject}",
        "Date" => "Mon, #{iran_now_time.day} Oct #{iran_now_time.year} #{iran_now_time.hour}:#{iran_now_time.minute}:#{iran_now_time.second} #{iran_now_time.zone_abbr}",
        "message-id" => "<#{:base64.encode(:crypto.strong_rand_bytes(64))}@name.com>"
      },

if you use Timex.format/2 ? how will you write this code ?

I used this but I had a bad format error, for example I can’t show the name of the week, if I use this:

Timex.format!(iran_now_time, "{WD}, {M} {YYYY} {M} {Z}")

** (Timex.Format.FormatError) invalid format: {:format, "Expected at least one parser to succeed at line 1, column 0."}
    (timex) lib/format/datetime/formatter.ex:54: Timex.Format.DateTime.Formatter.lformat!/4

it is not important that I should use Timex, I just want to create that time.

I edited my code:

Timex.format!(iran_now_time, "Mon, {D} Oct {YYYY} {h24}:{0m}:{0s} {Z}")

I have that problem yet :frowning_face:



Update:

Thank you , it was fixed.

Timex.format!(iran_now_time, "{WDshort}, {D} {Mshort} {YYYY} {h24}:{0m}:{0s} {Z}")

I made mistake to write [ after h24, I have a question , how can I learn Time short code like you wrote?

E,g: {Mshort} or {WDshort}, Are there the resources?

final code: Timex.format!(iran_now_time, "{WDshort}, {D} {Mshort} {YYYY} {h24}:{0m}:{0s} {Z}")

In :timex’ documentation. It’s a bit hidden though.

I already linked to the documentation of Timex.format/2. There we can find the following paragraph:

See Timex.Format.DateTime.Formatters.Default or Timex.Format.DateTime.Formatters.Strftime for documentation on the syntax supported by those formatters.

Sadly, both module names are neither formatted as code nor are they hyperlinked. So its a bit hard to spot. Using the left navigation, we can find them manually:

There are more formatters, which may have a different syntax than these.

5 Likes