Code Golf - Word Clock Write a program which takes the current time of the system clock, rounds to the nearest minute (you may choose how to round halves) and displays it formatted as the following:

A quarter past one in the morning.
A quarter to two in the afternoon.
Two o'clock in the afternoon.
Twenty-five minutes to three in the morning.
Twenty-seven minutes to seven in the evening.
One minute past twelve in the afternoon.
Twelve o'clock noon.
Twelve o'clock midnight.


Rules:


12:01am to 11:59am is deemed as morning. 
12:01pm to 5:59pm is deemed as afternoon.
6:00pm to 11:59pm is deemed as evening.
15 minutes past the hour must be expressed as A quarter past the hour
30 minutes past the hour must be expressed as Half past the hour
45 minutes past the hour must be expressed as A quarter to the upcoming hour
On-the-hour times must be expressed as the hour o'clock, with the addition of noon and midnight being expressed with the addition of noon or midnight respectively.
Other times in hh:01 to hh:29 must be expressed as (number of minutes) past the hour.
Other times in hh:31 to hh:59 must be expressed as (number of minutes) to the upcoming hour.
Twenty-one to twenty-nine must be hyphenated.
The first letter of the output must be capitalised. The other letters must be lower-case.


It would be useful to provide a testing version of your code so that it can be tested without manipulating the system clock.
Mathematica 450
Date[] calls for the current date and time. [[{4,5}]] returns the hour and minutes
f[]:=f[Date[][[{4,5}]]];
f[{h_,m_}]:=Module[{p,w,s},
p@h1_:=Which[0&lt;h&lt;12,&quot; in the morning.&quot;,12&lt;h&lt;18,&quot; in the afternoon.&quot;,18&lt;h&lt;24, &quot; in the evening.&quot;];
s[t_]:=WolframAlpha[&quot;spell &quot;&lt;&gt;ToString@t,{{&quot;Result&quot;,1},&quot;Plaintext&quot;}];
w=s[h~Mod~12]&lt;&gt;p@h;
Which[
m==0, Switch[h,12, &quot;noon&quot;, 0|24,&quot;midnight&quot;,_,s[h~Mod~12]&lt;&gt;p@h],
m==15,&quot;a quarter past &quot;&lt;&gt;w,
m==30,&quot;half past &quot;&lt;&gt;w,
m==45,&quot;a quarter to &quot;&lt;&gt;s[h~Mod~12+1]&lt;&gt;p@h,
m&lt;30,s@m&lt;&gt;&quot; minutes after &quot;&lt;&gt;w,
m&gt;29,s[60-m]&lt;&gt;&quot; minutes before &quot;&lt;&gt;s[h~Mod~12+1]&lt;&gt;p@h]]

Current Time
f[]


&quot;ten minutes past three in the afternoon.&quot;

Specific times
f[{4, 45}]
f[{10, 30}]
f[{11, 0}]
f[{12, 0}]
f[{13, 15}]
f[{15, 0}]
f[{22, 17}]
f[{24, 0}]


&quot;a quarter to five in the morning.&quot;
&quot;half past ten in the morning.&quot;
&quot;eleven in the morning.&quot;
&quot;noon&quot;
&quot;a quarter past one in the afternoon.&quot;
&quot;three in the afternoon.&quot;
&quot;seventeen minutes past ten in the evening.&quot;
&quot;midnight&quot;