Лучший класс для представления времени - PullRequest
3 голосов
/ 01 февраля 2012

Я работаю над приложением timetabling, и у меня есть класс: вызываемый ClassOption, представляющий возможное время, чтобы иметь класс. с полями (/ свойства): Day, StartTime, EndTime и Weeks.

Теперь Day просто, это тип DayOfWeek

Weeks потребует от меня создания пользовательского класса, потому что он представлен нотацией семестров в университетах или календарной неделей, но в конечном итоге сводится к целому ряду целых чисел.

Но какие звонки я должен использовать для StartTime и EndTime. Это время, но без какой-либо информации о дате. DateTime кажется разумным выбором, но они могут быть на любую дату. (/ много дат) По бизнес-логике они оба в час, но это не имеет значения

Ответы [ 3 ]

5 голосов
/ 01 февраля 2012

Если вы счастливы использовать стороннюю библиотеку, которая еще не совсем в версии v1, я бы хотел подключить Noda Time .Вы бы использовали LocalTime структуру.

Если вы застряли с библиотекой базовых классов, вы можете захотите использовать TimeSpan, или выможет придерживаться DateTime.Очевидно, я думаю, что LocalTime было бы более элегантным решением, хотя:)

О, и если вы все же используете Noda Time, пожалуйста, сообщите нам, если у вас есть какие-либо пожелания или комментарии ...

2 голосов
/ 01 февраля 2012

Вы можете использовать класс DateDiff библиотеки периода времени для .NET для представления периода времени:

// ----------------------------------------------------------------------
public void DateDiffSample()
{
  DateTime date1 = new DateTime( 2009, 11, 8, 7, 13, 59 );
  Console.WriteLine( "Date1: {0}", date1 );
  // > Date1: 08.11.2009 07:13:59
  DateTime date2 = new DateTime( 2011, 3, 20, 19, 55, 28 );
  Console.WriteLine( "Date2: {0}", date2 );
  // > Date2: 20.03.2011 19:55:28

  DateDiff dateDiff = new DateDiff( date1, date2 );

  // description
  Console.WriteLine( "DateDiff.GetDescription(1): {0}", dateDiff.GetDescription( 1 ) );
  // > DateDiff.GetDescription(1): 1 Year
  Console.WriteLine( "DateDiff.GetDescription(2): {0}", dateDiff.GetDescription( 2 ) );
  // > DateDiff.GetDescription(2): 1 Year 4 Months
  Console.WriteLine( "DateDiff.GetDescription(3): {0}", dateDiff.GetDescription( 3 ) );
  // > DateDiff.GetDescription(3): 1 Year 4 Months 12 Days
  Console.WriteLine( "DateDiff.GetDescription(4): {0}", dateDiff.GetDescription( 4 ) );
  // > DateDiff.GetDescription(4): 1 Year 4 Months 12 Days 12 Hours
  Console.WriteLine( "DateDiff.GetDescription(5): {0}", dateDiff.GetDescription( 5 ) );
  // > DateDiff.GetDescription(5): 1 Year 4 Months 12 Days 12 Hours 41 Mins
  Console.WriteLine( "DateDiff.GetDescription(6): {0}", dateDiff.GetDescription( 6 ) );
  // > DateDiff.GetDescription(6): 1 Year 4 Months 12 Days 12 Hours 41 Mins 29 Secs
} // DateDiffSample
1 голос
/ 01 февраля 2012

Я бы использовал DateTime, который можно использовать только со значениями времени, игнорируя дату, или TimeSpan, который может представлять время, прошедшее с полуночи, и, следовательно, время суток. Фактически, это именно то, как это используется в объекте DateTime, когда вы запрашиваете TimeOfDay, вы получаете TimeSpan.

Оба хороши тем, что дают вам набор удобных арифметических операций для сравнения, сложения и вычитания времени. Просто игнорируйте часть даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...