I get Japanese date (JDate) in following format, How can I validate it for month date and year.

DateTuple =  form_util:get_jdate_val("F_01_0070", Req), %%Get Jdate from Request

This function returns JDate DateTuple in the following format:

%%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": "明治"}

Now how to validate JDate to return {status, DateTuple}. I don't know the Japanese era and the year relations.

Is it possible to validate Japanese Date in erlang easily. I'm using Air Client So quite complicated to handle it using front end JavaScript.

Thank you in advance!

有帮助吗?

解决方案

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

However, This does not include month and date validations which is as usual. I will include once I finish with that.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top