Skip to content

Commit 89e3a81

Browse files
dcuddebackmichalmuskala
authored andcommitted
Skip intermediate parts when creating NaiveDateTime
1 parent 9752f1c commit 89e3a81

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

lib/elixir/lib/calendar/naive_datetime.ex

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,35 @@ defmodule NaiveDateTime do
171171
Calendar.microsecond(),
172172
Calendar.calendar()
173173
) :: {:ok, t} | {:error, atom}
174-
def new(year, month, day, hour, minute, second, microsecond \\ {0, 0}, calendar \\ Calendar.ISO) do
175-
with {:ok, date} <- Date.new(year, month, day, calendar),
176-
{:ok, time} <- Time.new(hour, minute, second, microsecond, calendar),
177-
do: new(date, time)
174+
def new(year, month, day, hour, minute, second, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)
175+
176+
def new(year, month, day, hour, minute, second, microsecond, calendar)
177+
when is_integer(microsecond) do
178+
new(year, month, day, hour, minute, second, {microsecond, 6}, calendar)
179+
end
180+
181+
def new(year, month, day, hour, minute, second, microsecond, calendar) do
182+
cond do
183+
not calendar.valid_date?(year, month, day) ->
184+
{:error, :invalid_date}
185+
186+
not calendar.valid_time?(hour, minute, second, microsecond) ->
187+
{:error, :invalid_time}
188+
189+
true ->
190+
naive_datetime = %NaiveDateTime{
191+
calendar: calendar,
192+
year: year,
193+
month: month,
194+
day: day,
195+
hour: hour,
196+
minute: minute,
197+
second: second,
198+
microsecond: microsecond
199+
}
200+
201+
{:ok, naive_datetime}
202+
end
178203
end
179204

180205
@doc """

0 commit comments

Comments
 (0)