2010-11-12 21 views
5

Có một lớp .NET gốc xử lý timespan như thế này không? Tôi đã không thể tìm thấy một.Có cách nào .NET để lưu trữ các khoảng thời gian như lớp tùy chỉnh của tôi không?

Có ai đến gần không?

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 

và một giai đoạn Tháng nguồn gốc:

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

Bạn đã xem TimeSpan chưa? – Nate

+1

Chuyển đổi DateTime thành Ticks. Sau đó, bạn có thể sử dụng các buit-ins của nhà khai thác dài. – WeNeedAnswers

+1

Tôi không chắc điều này có liên quan gì đến TimeSpan .net không. Các OP không thực sự quan tâm đến khoảng thời gian bao lâu, mà là các điểm cuối của chính phạm vi đó. – Greg

Trả lời

4

Câu trả lời ngắn: Tôi không nghĩ có bất kỳ lớp học tích hợp nào gần với điều đó. Có lẽ gần nhất là TimeSpan nhưng đó chỉ là một khoảng tương đối không có khái niệm về ngày bắt đầu hoặc ngày kết thúc tuyệt đối.

+0

Cảm ơn. Tôi thấy đối tượng TimeSpan và nó dường như không đầy đủ vì nó không có Ngày bắt đầu và kết thúc. Vì TimeSpan là một cấu trúc, tôi không thể kế thừa từ nó, nhưng có lẽ tôi có thể tạo một thuộc tính TimeSpan trên lớp của mình – VJK

1

Tôi đã không đọc tất cả các mã của bạn. Việc triển khai của bạn có thể cung cấp nhiều chức năng hơn nhưng việc triển khai .Net Framework được gọi là TimeSpan.

Nó nằm trong không gian tên Hệ thống.

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

TimeSpan được giới hạn trong nhiều ngày làm đơn vị lớn nhất. tức là không đo lường về số tháng hoặc năm. Nó có thể được mở rộng nếu cần thiết.

2

Sử dụng tiêu chuẩn .NET TimeSpan. Nếu cần, hãy tạo một lớp mới kế thừa TimeSpan nhưng thêm các phương thức mới theo yêu cầu.

+0

TimeSpan là một cấu trúc, không phải là một lớp. Bạn không thể kế thừa từ nó. Ia dded tghjis tài sản: Công cộng ReadOnly tài sản TimeSpan Như TimeSpan Nhận Trả lại Me.ToDate - Me.FromDate Kết thúc Nhận Kết thúc bất động sản – VJK

Các vấn đề liên quan