2014-02-20 102 views
2

我以下列格式獲取日期日期(JDate),如何驗證日期和年份。驗證erlang中的日期日期

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返回{狀態,DateTuple}。我不知道日本的年代和那年的關係。

是否可以在erlang中輕鬆驗證日文日期。我使用Air Client所以使用前端JavaScript處理它非常複雜。

預先感謝您!

回答

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

但是,這不包括像往常一樣的月份和日期驗證。一旦我完成,我將包括。