Класс, вычисляющий разницу в датах - проверить корректность реализации кода - C#
Формулировка задачи:
Приветствую!
Цель - написать класс, который будет преобразовывать полученную дату/время, рассчитывать разницу между этой датой/временем и их текущим значением, и выводить строку вида "1 минуту назад". Этот класс в дальнейшем буду использовать на веб-сайте для вывода даты/времени новости.
Чтобы была более понятна цель приведу пример: Текущее время 15:11, время размещения новости 15:10, значит нужно вывести "1 минуту назад".
Собственно написал и протестировал сам класс. Хотелось бы услышать мнение опытных программистов по поводу оформления кода, возможно советы по доработке, ну и может быть кому-то пригодится сам код
Код моего класса:
Код для тестирования работы моего класса:
Использованные сборки:
class MyClass
{
public string SetDateTime(DateTime DT)
{
string result = "";
DateTime DT_now = DateTime.Now;
if (DT.Date == DT_now.Date) //Если дата сегодняшняя
{
if (DT.TimeOfDay > DT_now.AddHours(-1).TimeOfDay) //Если время меньше текущего на 1 ЧАС или меньше
{
if (DT.TimeOfDay > DT_now.AddMinutes(-1).TimeOfDay) //Если время меньше текущего на 1 МИНУТУ или меньше
{
if (DT.TimeOfDay > DT_now.AddSeconds(-1).TimeOfDay) //Если время меньше текущего на 1 СЕКУНДУ или меньше
{
result = "Только что";
}
else
{
byte seconds = Convert.ToByte((DT_now - DT).Seconds);
result = String.Format("{0} секунд{1} назад", seconds, SetTimeEnding(seconds));
}
}
else
{
byte minutes = Convert.ToByte((DT_now - DT).Minutes);
result = String.Format("{0} минут{1} назад", minutes, SetTimeEnding(minutes));
}
}
else
{
result = "Сегодня в " + DT.ToShortTimeString();
}
}
else
{
if (DT.Date == DT_now.Date.AddDays(-1))
{
result = "Вчера в " + DT.ToShortTimeString();
}
else
{
result = DT.ToShortDateString();
}
}
return result;
}
private string SetTimeEnding(byte time)
{
string result = "";
byte[] for_time_end_1 = new byte[5] { 1, 21, 31, 41, 51 };
byte[] for_time_end_2 = new byte[15] { 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54 };
if (for_time_end_1.Contains(time))
{
result = "у";
}
else
{
if (for_time_end_2.Contains(time))
{
result = "ы";
}
}
return result;
}
}MyClass mc = new MyClass();
DateTime d1 = new DateTime(2014, 8, 4);
DateTime d2 = new DateTime(2014, 8, 7);
DateTime d3 = new DateTime(2013, 8, 4);
DateTime d_today = new DateTime();
DateTime d_yesterday = new DateTime();
d_today = DateTime.Now;
d_yesterday = DateTime.Now.AddDays(-1);
Console.WriteLine(d1 + " - " + mc.SetDateTime(d1));
Console.WriteLine(d2 + " - " + mc.SetDateTime(d2));
Console.WriteLine(d3 + " - " + mc.SetDateTime(d3));
Console.WriteLine(d_today + " - " + mc.SetDateTime(d_today));
Console.WriteLine(d_yesterday + " - " + mc.SetDateTime(d_yesterday));
for (byte i = 0; i <= 60; i++)
{
Console.WriteLine("{0} - {1} - {2}", i, mc.SetDateTime(DateTime.Now.AddSeconds(-1 * i)), mc.SetDateTime(DateTime.Now.AddMinutes(-1 * i)));
}
Console.ReadLine()using System; using System.Collections.Generic; using System.Linq; using System.Text;
Решение задачи: «Класс, вычисляющий разницу в датах - проверить корректность реализации кода»
textual
Листинг программы
private string SetTimeEnding(int time)
{ if((time/10)%10==1) return "";
int tmp = time%10;
return (tmp ==1)? "у":(((tmp-4)>0 )? "": "ы");
}