-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}.
但是,這不包括像往常一樣的月份和日期驗證。一旦我完成,我將包括。