1

我得到以下格式的日本日期(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 处理它非常复杂。

先感谢您!

4

1 回答 1

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}.

但是,这不包括像往常一样的月份和日期验证。完成后我将包括在内。

于 2014-02-21T06:41:33.577 回答