Question

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!

Was it helpful?

Solution

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top