40 lines
1.6 KiB
Erlang
40 lines
1.6 KiB
Erlang
-module( date_manipulation ).
|
|
|
|
-export( [task/0] ).
|
|
|
|
task() ->
|
|
{Date_time, TZ} = date_time_tz_from_string( "March 7 2009 7:30pm EST" ),
|
|
Seconds1 = calendar:datetime_to_gregorian_seconds( Date_time ),
|
|
Seconds2 = calendar:datetime_to_gregorian_seconds( {calendar:gregorian_days_to_date(0), {12, 0, 0}} ),
|
|
Date_time_later = calendar:gregorian_seconds_to_datetime( Seconds1 + Seconds2 ),
|
|
{Date_time_later, TZ}.
|
|
|
|
|
|
|
|
date_time_tz_from_string( String ) ->
|
|
[Month, Date, Year, Time, TZ] = string:tokens( String, " " ),
|
|
[Hour, Minute] = string:tokens( Time, ":" ),
|
|
{{date_from_strings(Year, Month, Date), time_from_strings(Hour, Minute)}, TZ}.
|
|
|
|
date_from_strings( Year, Month, Date ) ->
|
|
{erlang:list_to_integer(Year), date_from_strings_month(Month), erlang:list_to_integer(Date)}.
|
|
|
|
date_from_strings_month( "January" ) -> 1;
|
|
date_from_strings_month( "February" ) -> 2;
|
|
date_from_strings_month( "March" ) -> 3;
|
|
date_from_strings_month( "April" ) -> 4;
|
|
date_from_strings_month( "May" ) -> 5;
|
|
date_from_strings_month( "June" ) -> 6;
|
|
date_from_strings_month( "July" ) -> 7;
|
|
date_from_strings_month( "August" ) -> 8;
|
|
date_from_strings_month( "September" ) -> 9;
|
|
date_from_strings_month( "October" ) -> 10;
|
|
date_from_strings_month( "November" ) -> 11;
|
|
date_from_strings_month( "December" ) -> 12.
|
|
|
|
time_from_strings( Hour, Minute_12hours ) ->
|
|
{ok, [Minute], AM_PM} = io_lib:fread("~d", Minute_12hours ),
|
|
{time_from_strings_hour( Hour, string:to_lower(AM_PM) ), Minute, 0}.
|
|
|
|
time_from_strings_hour( Hour, "am" ) -> erlang:list_to_integer( Hour );
|
|
time_from_strings_hour( Hour, "pm" ) -> erlang:list_to_integer( Hour ) + 12.
|