Есть ли способ .NET для хранения периодов времени, как мой пользовательский класс? - PullRequest
5 голосов
/ 13 ноября 2010

Есть ли собственный класс .NET, который обрабатывает временной интервал, как это?Я не смог найти его.

Есть ли такой, который подходит ближе?

Public Class Period

    Property FromDate As Date
    Property ToDate As Date

    Public Sub New(ByVal fromDate As Date, ByVal toDate As Date)

        If fromDate > toDate Then
            Throw New ArgumentException("fromDate must be less than Or equal toDate")
        End If

        _FromDate = fromDate
        _ToDate = toDate

    End Sub

    Public Overloads Shared Operator =(ByVal period1 As Period,
                                       ByVal period2 As Period) As Boolean

        Return period1.FromDate = period2.FromDate AndAlso
               period1.ToDate = period2.ToDate

    End Operator

    Public Overloads Shared Operator <>(ByVal period1 As Period,
                                        ByVal period2 As Period) As Boolean

        Return Not period1 = period2

    End Operator

    Public Overloads Shared Operator <(ByVal period1 As Period,
                                       ByVal period2 As Period) As Boolean

        Return period1.FromDate < period2.FromDate

    End Operator

    Public Overloads Shared Operator >(ByVal period1 As Period,
                                   ByVal period2 As Period) As Boolean

        Return period1.FromDate > period2.FromDate

    End Operator

    Public Overloads Shared Operator >=(ByVal period1 As Period,
                               ByVal period2 As Period) As Boolean

        Return period1.FromDate >= period2.FromDate

    End Operator

    Public Overloads Shared Operator <=(ByVal period1 As Period,
                                        ByVal period2 As Period) As Boolean

        Return period1.FromDate <= period2.FromDate

    End Operator

    Public Function Contains(ByVal checkDate As Date) As Boolean

        Return checkDate >= Me.FromDate AndAlso
               checkDate < Me.ToDate

    End Function

    Public Overrides Function ToString() As String
        Return Format(_FromDate, "MMM-yyyy") & "-" &  Format(_ToDate, "MMM-yyyy")            
    End Function

End Class

и производный период месяца:

Public Class MonthPeriod : Inherits Period

    Private _MonthStartDate As Date

     Public Sub New(ByVal dateInMonth As Date)

        'Everything >= the 1st of the month to < the 1st of the next month
        MyBase.New(New Date(dateInMonth.Year, dateInMonth.Month, 1),
                   New Date(dateInMonth.Year, dateInMonth.Month, 1).AddMonths(1))

        _MonthStartDate = New Date(dateInMonth.Year, dateInMonth.Month, 1)

    End Sub

    Public Overrides Function ToString() As String
        Return Format(_MonthStartDate, "MMM-yyyy")
    End Function

End Class

Ответы [ 3 ]

4 голосов
/ 13 ноября 2010

Краткий ответ: я не думаю, что есть какой-либо встроенный класс, который близок к этому. Вероятно, самым близким является TimeSpan, но это просто относительный интервал без понятия абсолютной даты начала или окончания.

2 голосов
/ 13 ноября 2010

Используйте стандартное время .NET. При необходимости создайте новый класс, который наследует TimeSpan, но при необходимости добавляет новые методы.

1 голос
/ 13 ноября 2010

Я не прочитал весь ваш код. Ваша реализация может предоставлять больше функциональности, но реализация .Net Framework называется TimeSpan.

Он находится в пространстве имен системы.

http://msdn.microsoft.com/en-us/library/system.timespan(v=VS.90).aspx

TimeSpan ограничен днями как самая большая единица. Т.е. не измеряется в терминах месяцев или лет. При необходимости он может быть расширен.

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