using Microsoft.VisualStudio.TestTools.UnitTesting;
public static string GetTimeInWords(DateTime time)
int hour = Convert.ToInt32(time.ToString("hh"));
int nextHour = (hour%12)+1;
string result = string.Empty;
result = string.Format("{0} o'clock", hour);
result = string.Format("{0} minute past {1}", min, hour);
result = string.Format("half past {0}", hour);
result = string.Format("quarter past {0}", hour);
result = string.Format("{0} minutes past {1}", min, hour);
result = string.Format("quarter to {0}", nextHour);
result = string.Format("{0} minute to {1}", 60-min, nextHour);
result = string.Format("{0} minutes to {1}", 60-min, nextHour);
public static void Main()
Assert.AreEqual("3 o'clock", GetTimeInWords(DateTime.Parse("3:00 am")));
Assert.AreEqual("13 minutes to 6", GetTimeInWords(DateTime.Parse("5:47 pm")));
Assert.AreEqual("half past 12", GetTimeInWords(DateTime.Parse("12:30 am")));
Assert.AreEqual("quarter to 1", GetTimeInWords(DateTime.Parse("12:45 am")));
Assert.AreEqual("quarter past 1", GetTimeInWords(DateTime.Parse("1:15 pm")));
Assert.AreEqual("1 minute to 12", GetTimeInWords(DateTime.Parse("11:59 am")));
Assert.AreEqual("12 minutes past 4", GetTimeInWords(DateTime.Parse("4:12 am")));
Assert.AreEqual("quarter to 2", GetTimeInWords(DateTime.Parse("1:45 pm")));
Assert.AreEqual("20 minutes to 7", GetTimeInWords(DateTime.Parse("6:40 am")));
Console.WriteLine("All tests passed");