我以下列格式获得日语日期(JDate),如何验证月份日期和年份。
DateTuple = form_util:get_jdate_val("F_01_0070", Req), %%Get Jdate from Request
此函数以下列格式返回JDate DateTuple:
%%DateTuple
{era,4,year,26, month,45,day,11}.
%%Here era=4, year=26, invalid month=45 and Date=11.
%%Where era number is calculated from this:
era_tuple ={"4": "平成","3":"昭和", "2" :"大正", "1": "明治"}
现在如何验证JDate以返回{status,DateTuple}。我不知道日本时代和年份关系。
是否可以轻松验证erlang中的日期日期。我正在使用Air Client使用前端JavaScript处理它非常复杂。
提前谢谢!
答案 0 :(得分:1)
-module(jdate).
-export([to_jdate/1]).
-define(HEISEI, 4).
-define(HEISEI_START_YEAR, 1989).
-define(HEISEI_START_MONTH, 1).
-define(HEISEI_START_DAY, 8).
-define(SHOWA, 3).
-define(SHOWA_START_YEAR, 1926).
-define(SHOWA_START_MONTH, 12).
-define(SHOWA_START_DAY, 25).
-define(SHOWA_LAST_YEAR, 64).
-define(TAISHOU, 2).
-define(TAISHOU_START_YEAR, 1912).
-define(TAISHOU_START_MONTH, 7).
-define(TAISHOU_START_DAY, 30).
-define(TAISHOU_LAST_YEAR, 15).
-define(MEIJI, 1).
-define(MEIJI_START_YEAR, 1868).
-define(MEIJI_START_MONTH, 1).
-define(MEIJI_START_DAY, 1).
-define(MEIJI_LAST_YEAR, 45).
-define(JP_HOUR_OFFSET, 9).
% Converts a datetime to a Japanese Year, Month, and Day (assumes the datetime is already in Japanese locale).
to_jdate({era, Era, year, Year, month, Month, day, Day}) ->
{Era, Year, Month, Day};
to_jdate([{era, Era}, {year, Year}, {month, Month}, {day, Day}]) ->
{Era, Year, Month, Day};
to_jdate({_, _, _} = Timestamp) ->
io:format("timestamp: ~p~n", [Timestamp]),
Datetime = calendar:now_to_local_time(Timestamp),
io:format("datetime: ~p~n", [Datetime]),
to_jdate(Datetime);
to_jdate({{Year, Month, Day}, {Hour, Minute, Second}}) when is_integer(Year) and
is_integer(Month) and
is_integer(Day) and
is_integer(Hour) and
is_integer(Minute) and
is_integer(Second) ->
if
Year > ?HEISEI_START_YEAR ->
{?HEISEI, Year - ?HEISEI_START_YEAR + 1, Month, Day};
Year =:= ?HEISEI_START_YEAR ->
if
Month =:= ?HEISEI_START_MONTH ->
if
Day < ?HEISEI_START_DAY ->
{?SHOWA, ?SHOWA_LAST_YEAR, Month, Day};
true ->
{?HEISEI, 1, Month, Day}
end;
true ->
{?HEISEI, 1, Month, Day}
end;
Year > ?SHOWA_START_YEAR ->
{?SHOWA, Year - ?SHOWA_START_YEAR + 1, Month, Day};
Year =:= ?SHOWA_START_YEAR ->
if
Month < ?SHOWA_START_MONTH ->
{?TAISHOU, ?TAISHOU_LAST_YEAR, Month, Day};
Day >= ?SHOWA_START_DAY ->
{?SHOWA, 1, Month, Day};
true ->
{?TAISHOU, ?TAISHOU_LAST_YEAR, Month, Day}
end;
Year > ?TAISHOU_START_YEAR ->
{?TAISHOU, Year - ?TAISHOU_START_YEAR + 1, Month, Day};
Year =:= ?TAISHOU_START_YEAR ->
if
Month < ?TAISHOU_START_MONTH ->
{?MEIJI, ?MEIJI_LAST_YEAR, Month, Day};
Month > ?TAISHOU_START_MONTH ->
{?TAISHOU, Year - ?TAISHOU_START_YEAR + 1, Month, Day};
true ->
if
Day >= ?TAISHOU_START_DAY ->
{?TAISHOU, 1, Month, Day};
true ->
{?MEIJI, ?MEIJI_LAST_YEAR, Month, Day}
end
end;
true ->
{?MEIJI, Year - ?MEIJI_START_YEAR + 1, Month, Day}
end;
to_jdate(undefined) ->
{undefined, undefined, undefined, undefined}.
但是,这不包括与往常一样的月份和日期验证。一旦我完成,我将包括在内。