DateTime format issue in Phoenix. Change Time Zone

phoenix
datetime

#1

I am dealing with DateTime in Elixir. I want to change my Time Zone and date format. 2019/02/06 23:10 is my required format here. But when I use <%= "#{NaiveDateTime.utc_now}" %> This 2019-03-01 06:23:20.443620 shown.

I also want to change my timezone. Toronto, ON, Canada (GMT-5)


#2

You need to use Timex, it provides functions for TZ conversion and formatting.


#3

After I Add this in my system, System stop working and start sowing me errors.

To use Timex with my projects, edit my mix.exs file and add it as a dependency, as well as I added :timex to my applications list.

def application do
  [
      mod: {GenPrNew.Application, []},
      extra_applications: [:logger, :runtime_tools],
      applications: [:timex]
  ]
end

defp deps do
  [
      {:phoenix, "~> 1.4.1"},
      {:phoenix_pubsub, "~> 1.1"},
      {:phoenix_ecto, "~> 4.0"},
      {:ecto_sql, "~> 3.0"},
      {:postgrex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.11"},
      {:phoenix_live_reload, "~> 1.2", only: :dev},
      {:gettext, "~> 0.11"},
      {:jason, "~> 1.0"},
      {:plug_cowboy, "~> 2.0"},
      {:timex, "~> 3.0"}
  ]
end

Then after running mix deps.get I start the server and have the following errors.

Compiling 13 files (.ex)
Generated gen_pr_new app
[info] Application gen_pr_new exited: GenPrNew.Application.start(:normal, []) returned an error: shutdown: failed to start child: GenPrNew.Repo
    ** (EXIT) shutdown: failed to start child: DBConnection.ConnectionPool
        ** (EXIT) exited in: GenServer.call(DBConnection.Watcher, {:watch, DBConnection.ConnectionPool.PoolSupervisor, [#PID<0.364.0>, #Referen
ce<0.2753608256.129368067.63218>, Postgrex.Protocol, [types: Postgrex.DefaultTypes, port: 5432, repo: GenPrNew.Repo, telemetry_prefix: [:gen_pr
_new, :repo], otp_app: :gen_pr_new, timeout: 15000, username: "postgres", password: "", database: "gen_pr_new_dev", hostname: "localhost", pool
_size: 10, pool: DBConnection.ConnectionPool]]}, :infinity)
            ** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its

 application isn't started
** (Mix) Could not start application gen_pr_new: GenPrNew.Application.start(:normal, []) returned an error: shutdown: failed to start child: Ge
nPrNew.Repo
    ** (EXIT) shutdown: failed to start child: DBConnection.ConnectionPool
        ** (EXIT) exited in: GenServer.call(DBConnection.Watcher, {:watch, DBConnection.ConnectionPool.PoolSupervisor, [#PID<0.364.0>, #Referen
ce<0.2753608256.129368067.63218>, Postgrex.Protocol, [types: Postgrex.DefaultTypes, port: 5432, repo: GenPrNew.Repo, telemetry_prefix: [:gen_pr
_new, :repo], otp_app: :gen_pr_new, timeout: 15000, username: "postgres", password: "", database: "gen_pr_new_dev", hostname: "localhost", pool
_size: 10, pool: DBConnection.ConnectionPool]]}, :infinity)
            ** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its
 application isn't started

#4

By setting applications: key you’re no longer using “application inference” [1], so you’d have to explicitly put all dependencies there if you want them started. The lack of :db_connection in the application list causes the crash.

It’s best not to set applications: key explicitly, and let inference do it’s work. Timex should probably show how to install it with and without application inference, if it doesn’t, I think a PR to update docs is likely to get accepted.

Worth mentioning that as of Elixir v1.8 you no longer need to use Timex to convert between timezones, this functionality is now available in stdlib using DateTime.shift_zone/3. You’d need a timezone database like the one provided by tzdata package [2]

There’re no built-in formatting options other than ISO 8601, so if you need to have a custom format you need to roll your own or bring in Timex. If formatting would be the only reason to bring Timex though, I’d reconsider that.

[1] https://github.com/elixir-lang/elixir/blob/v1.4/CHANGELOG.md#application-inference
[2] https://hex.pm/packages/tzdata