@@ -171,10 +171,35 @@ defmodule NaiveDateTime do
171
171
Calendar . microsecond ( ) ,
172
172
Calendar . calendar ( )
173
173
) :: { :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
178
203
end
179
204
180
205
@ doc """
0 commit comments