سؤال

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