2009-05-15 37 views
6

Vấn đề:TT ngày Format C#

Bạn đang đưa ra ngày tháng trong một định dạng của YYYYddd, đó là năm, tiếp theo là các ngày trong năm, từ 1 đến 365 (366). Ví dụ hôm nay sẽ là 2009135 (5/15/2009).

Cách tốt nhất để tạo ngày giờ mới từ điều này là gì? Trong Ruby tôi biết có một hàm tạo lấy hai số như vậy

Date.ordinal(2009, 135) 

Có một hàm tạo tương tự cho C# không?

Trả lời

10

Hmm, tôi không chắc chắn nếu có một cách trực tiếp hơn, nhưng điều này sẽ làm việc

new DateTime(year, 1, 1).AddDays(day - 1); 
3

Làm thế nào về:

new DateTime(ordinal/1000, 1, 1).AddDays((ordinal % 1000) - 1); 

này dựa vào ngày 1 năm 2009 được thể hiện dưới dạng 2.009.001 thay vì 20091 mặc dù. Nếu đó là sau này, nó hơi phức tạp hơn (mặc dù vẫn không chính xác cứng, tất nhiên).

Tôi sẽ cố gắng di chuyển ra khỏi định dạng như vậy một cách nhanh chóng mặc dù - nó không chính xác là một định dạng phổ biến và hoàn toàn không thể đọc được. Giả sử định dạng "2009001" nó ít nhất là loại hợp lý, nhưng tôi không thể nghĩ nhiều về lợi ích của nó.

+0

oh tin tôi đi, đó là lý do tôi chuyển đổi nó. Đây chỉ là cách nó được trao cho chúng tôi. chúng tôi lấy định dạng đó và nhập vào cơ sở dữ liệu của chúng tôi, nhưng chuyển đổi nó thành một ngày giờ bình thường. Btw, tôi thích câu trả lời của bạn, nó đánh tôi để làm điều đó như câu trả lời đầu tiên, nhưng tôi thà làm điều đó trong một dòng. Đoán Ruby của nó trong tôi. Và yah, nó luôn luôn ra trong một định dạng YYYYddd. – taelor

+0

btw, tôi thực sự chỉ đưa ra câu trả lời cho người khác. anh ấy chỉ có 4k điểm, và tôi muốn chia sẻ tình yêu. – taelor

+0

Không vấn đề gì - Tôi không nghĩ mất 15 sẽ làm tôi tổn thương quá nhiều :) –

1
int year = 2009; 
int month = 1; 
int day = 1; 
int dayOfYear= 135; 

DateTime myDate = new DateTime(year, month, day); 
myDate.AddDays(dayOfYear - 1);