在erlang中验证日期日期

时间:2014-02-20 05:49:04

标签: erlang chicagoboss

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

提前谢谢!

1 个答案:

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

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