我们有三种类型的主机,在它们上面运行文件系统并保存jpeg。最初,我们有一个主机localhost:8888
,早于{{2017, 10, 31}, {23, 59, 59}}
,我们开始处理2个主机,新主机是localhost:8889
。
def point_to_seaweed(request_date) do
oct_date =
{{2017, 10, 31}, {23, 59, 59}}
|> Calendar.DateTime.from_erl!("UTC")
case Calendar.DateTime.diff(request_date, oct_date) do
{:ok, _, _, :after} -> "localhost:8889"
_ -> "localhost:8888"
end
end
每当请求日期大于{{2017, 10, 31}, {23, 59, 59}}
时,我们就会切换到新主机。但是现在在{{2018, 10, 31}, {23, 59, 59}}
上,我们要更改为新主机,但也需要同时处理所有2个旧主机。
我尝试过这个。
def point_to_seaweed(request_date) do
oct_date =
{{2017, 10, 31}, {23, 59, 59}}
|> Calendar.DateTime.from_erl!("UTC")
case Calendar.DateTime.diff(request_date, oct_date) do
{:ok, secs, _, :after} ->
case secs > 31536000 do
true -> "localhost:8890"
false -> "localhost:8889"
end
_ -> "localhost:8888"
end
end
这是更好的方法吗? 31536000
已经一年了。这可以用另一种方法吗?
答案 0 :(得分:2)
为此,我将使用内置的NaiveDateTime模块并定义一个辅助函数,以检查Erlang日期是否早于另一个Erlang日期:
def before?(date1, date2) do
NaiveDateTime.diff(NaiveDateTime.from_erl!(date1), NaiveDateTime.from_erl!(date2)) < 0
end
然后使用cond
:
def point_to_seaweed(request_date) do
port = cond do
before?(request_date, {{2017, 10, 31}, {23, 59, 59}}) -> 8888
before?(request_date, {{2018, 10, 31}, {23, 59, 59}}) -> 8889
true -> 8890
end
"localhost:#{port}"
end