我想从用户那里获取一个日期输入并比较(如果它至少未来30分钟)是否为将来,并将其保存到数据库中。 来自用户输入的日期是这样的2018-09-26 用户输入的时间是这样的16:00 所以我将其转换为朴素的日期时间
def build_naive_datetime(date, time) do
{:ok, datetime} = NaiveDateTime.from_iso8601("#{date} #{time}:00")
datetime
end
因此它返回~N[2018-09-26 16:00:00]
。
,我想比较一下。
def schedule_datetime_is_future?(schedule_datetime) do
# 30 mins future from now on
future_datetime = DateTime.to_naive(Timex.add(Timex.now, Timex.Duration.from_minutes(30)))
case Timex.compare(schedule_datetime, future_datetime) do
1 ->
# schedule datetime is future
true
-1 ->
# schedule datetime is not future
false
_ ->
false
end
end
但是Timex.now返回我的开发计算机时区时间(也许返回utc)。 因此比较无法正常进行。(用户输入的日期时间是本地时间。) 我怎样才能更好地做到这一点? 我是否必须将用户日期时间更改为UTC时间? 我该怎么办?
谢谢
答案 0 :(得分:2)
首先,您不应将任何内容转换为NaiveDateTime
,因为纯朴的日期时间根本没有时区(因此没有名称)。
您可能应该使用DateTime.diff/3
:
def build_datetime(date, time) do
with {:ok, datetime, 0} <- DateTime.from_iso8601("#{date}T#{time}:00Z"),
do: datetime
end
def schedule_datetime_is_future?(schedule_datetime) do
DateTime.diff(schedule_datetime, DateTime.utc_now) > 30 * 60
end