2011-10-31 37 views
25

Tôi đang tạo công việc hẹn giờ trong VS cho SharePoint và tôi muốn tạo đối tượng Ngày chỉ có tháng và ngày. Lý do là vì tôi muốn công việc này chạy hàng năm vào ngày cụ thể.Tạo thời gian ngày chỉ theo tháng và theo ngày, không năm

Nếu không thể với đối tượng ngày, thì bạn sẽ làm cách nào để thực hiện việc này?

Đây là những gì tôi đã có:

DateTime value = new DateTime(2010, 1, 18); 
+11

Ngày có năm. Kết thúc câu chuyện. Nếu bạn muốn chỉ tháng và ngày, hãy tạo kiểu đối tượng của riêng bạn để giữ nó. –

+0

đúng sự thật, tôi đoán câu hỏi của tôi là sau đó .. Làm thế nào bạn sẽ có thể có một ngày định kỳ mà không có nhiều đối tượng/sự kiện – novicePrgrmr

+1

Ai sẽ sử dụng đối tượng datetime này? – sll

Trả lời

40

Vâng, bạn có thể tạo kiểu riêng của bạn - nhưng một DateTimeluôn có một ngày đầy đủ và thời gian. Bạn thậm chí không thể có "chỉ một ngày" bằng cách sử dụng DateTime - gần nhất bạn có thể đến là có một DateTime vào lúc nửa đêm.

Bạn luôn thể bỏ qua năm mặc dù - hoặc đi năm nay:

// Consider whether you want DateTime.UtcNow.Year instead 
DateTime value = new DateTime(DateTime.Now.Year, month, day); 

Để tạo kiểu riêng của bạn, bạn có thể luôn luôn chỉ cần nhúng một DateTime trong một cấu trúc, và proxy trên các cuộc gọi như AddDays v.v.

public struct MonthDay : IEquatable<MonthDay> 
{ 
    private readonly DateTime dateTime; 

    public MonthDay(int month, int day) 
    { 
     dateTime = new DateTime(2000, month, day); 
    } 

    public MonthDay AddDays(int days) 
    { 
     DateTime added = dateTime.AddDays(days); 
     return new MonthDay(added.Month, added.Day); 
    } 

    // TODO: Implement interfaces, equality etc 
} 

Lưu ý rằng năm bạn chọn ảnh hưởng đến hành vi của loại - ngày 29 tháng 2 có phải là giá trị tháng/ngày hợp lệ hay không? Nó phụ thuộc vào năm ...

Cá nhân tôi không nghĩ rằng tôi sẽ tạo loại cho điều này - thay vào đó tôi sẽ có phương thức trả lại "lần tiếp theo chương trình sẽ chạy".

+1

[NodaTime] (http://nodatime.org/) có giải quyết vấn đề này không? – Shimmy

+0

@Shimmy: Không có loại tháng/ngày trong Thời gian Noda, không - cũng không phải loại năm/tháng như bạn có thể muốn cho thẻ tín dụng. –

+0

tx cho câu trả lời của bạn. Có trong Java NodaTime, tôi có sai không? – Shimmy

1

Không có điều nào như số DateTime mà không có một năm!

Từ những gì tôi thu thập thiết kế của bạn là một chút lạ:

Tôi muốn giới thiệu lưu trữ một "bắt đầu" (DateTime bao gồm năm đối với sự xuất hiện đầu tiên) và một giá trị mà chỉ định làm thế nào để tính toán sự kiện tiếp theo ... điều này có thể là ví dụ: TimeSpan hoặc một số cấu trúc tùy chỉnh đặc biệt. vì "mỗi năm" có thể có nghĩa là sự kiện xảy ra vào một ngày cụ thể và sẽ không tự động giống như nói rằng nó xảy ra trong +365 ngày.

Sau khi sự kiện xảy ra, bạn tính giá trị tiếp theo và lưu trữ v.v.

1

Làm thế nào để tạo hẹn giờ với ngày tiếp theo?

Trong gọi lại bộ hẹn giờ, bạn tạo bộ hẹn giờ cho năm tiếp theo? DateTime luôn có giá trị năm. Những gì bạn muốn thể hiện là một đặc tả thời gian định kỳ. Đây là một loại khác mà bạn cần tạo. DateTime luôn đại diện cho một ngày và giờ cụ thể nhưng không phải là ngày định kỳ.

0

Dù sao bạn cần 'Năm'.

Trong một số trường kỹ thuật, bạn có ngày cố định và tháng và năm có thể thay đổi. Nhưng ngày và tháng đó rất quan trọng để bắt đầu tính toán mà không xem xét bạn là năm nào. Ví dụ: người dùng của bạn chỉ nên chọn một ngày và một tháng và việc cung cấp năm tùy thuộc vào bạn.

Bạn có thể tạo hộp tổ hợp tùy chỉnh bằng cách sử dụng: Customizable ComboBox Drop-Down.

1- Trong VS tạo điều khiển người dùng.

2- Xem mã trong liên kết ở trên để impelemnting kiểm soát đó.

3- Tạo điều khiển người dùng khác và đặt trong đó 31 nút hoặc nhãn và phía trên chúng đặt nhãn để hiển thị tháng.

4- Đặt điều khiển ở bước 3 trong hộp tổ hợp tùy chỉnh của bạn.

5- Đặt điều khiển trong setp 4 ở bước 1.

Bạn hiện có quyền kiểm soát chỉ với ngày và tháng. Bạn có thể sử dụng bất kỳ năm nào bạn có trong cơ sở dữ liệu của mình hoặc ....

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