2011-12-02 6 views
23

C#으로 연도를 나타내는 Timespan 구조체를 원합니다.1 년의 기간을 얻는 방법?

+2

[TimeSpan] (http://msdn.microsoft.com/en-us/library/system.timespan.aspx)은 개체가 아닌 구조입니다 :-) –

+1

윤년, 보통 연도 또는 평균 연도? –

+1

이 질문은 좋은 토론으로 연결됩니다. +1 – Matt

답변

33

까다로운 문제는 1 년이란 시작 지점에 달려 있다는 것입니다.

당신은 할 수

DateTime now = DateTime.Now; 
TimeSpan span = now.AddYears(1) - now; 

이 나중에

+0

sehe가 정확하면 1 년의 기간이 모든 시작 지점에 고유합니다. –

+0

대단히 감사합니다. 그러나 어떻게 동작하는지 몇 가지 예를 추가 할 수 있습니까? 1 년의 시간 간격이 시작 지점에 달려있는 것이 왜 중요한가? 지금 내가 어딘가에 문제가 될 수 상상할 수 없습니다.하지만 어딘가에있다 :) 감사합니다 – Zavael

+1

오, 이제 내가 왜 1 년이 답변을 추가하고 XmlConvert.ToString (범위) 항상 얻을 때 깨달았다. PnYnMnDnHnMnS와 같은 출력을 원합니다. 항상 PnDnH를 만듭니다 ... 몇 년과 몇 달이 왜 나타나지 않습니까? – Zavael

2

1 년에 고정 길이가 없으므로 (365 일 또는 366 일 또는 365.25 분)? 다른 peoplehave 당신이 윤년을 고려하는 것이 좋습니다 언급 한 바와 같이 당신이 시간 범위 (28, 29, 30, 삼십일일?)로 한 달에

+4

그리고 도약 초와 다른 이상 현상을 잊어 버렸습니다. 두 번째 ... 거기에 – sehe

+0

@BoltClock : 예 한스는 여분의 초를 사용하여 닌자에게 그 오른쪽을 편집했습니다. – sehe

+0

@sehe : 그래서 당신은 빠른 호출 그것없이 편집 하나, 멋지다! – leppie

2
DateTime intialDate = Date.Now.Date; 
TimeSpan yearSpan = intialDate.AddYears(1).Subtract(intialDate) 

을 가질 수 없습니다 이유이기도합니다. 이 경우 intialDate를 적절하게 도입 할 수 있습니다.

2

거친 예를 들어 1 년 당신에게 현재의 순간부터 1 year timespan을 줄 것이다 :

TimeSpan oneYearSpan = new TimeSpan(365, 0, 0, 0); 

이 할 것인가?

+2

그리고 만약 그것이 도약이라면? –

+0

알아! :) 그게 왜 거친 예입니다. 제 투표는 sehe입니다. – Nayan

0

모든 연도가 동일한 길이가 아니기 때문에 표시 할 연도에 따라 다릅니다.

var timestamp = new DateTime(2011, 1, 1) - new DateTime(2010, 1, 1); 

변경 DateTimes의 해 원하는 년의 길이를 확인하는 방법은 다음과 같습니다

예를 들어 2010 년의 길이를 찾을 수있는 방법입니다.

1

중요한 질문은 다음과 같습니다. 어느 해?

시간의 길이는 분명히 원하는 연도가 윤년인지 여부와 시작 시점에 따라 다릅니다.

오늘부터 시작하는 1 년을 원한다면 @ sehe의 답변으로 이동하십시오.

당신이 @Oyvind와 현재 연도의 이동을 원하는 경우에

,

당신은 당신이 @Nayan로 이동, 또는 365.25 근사 사용 할 수있는 합리적인 근사합니다 : 여기

TimeSpan oneYearSpan = new TimeSpan(365, 6, 0, 0); 
0

어떻게 할 것을 이것은 하루의 수를 확인하기 위해 IsLeapYear를 활용합니다.

int span = DateTime.IsLeapYear(1996) ? 366: 365; 
var year1996 = new TimeSpan(span, 0, 0, 0); 
+0

눈에 띄지 않는 모든 시간대가 1 월 1 일에 시작하는 것은 아닙니다. 이런 식으로하지 마십시오. – oerkelens

1

꽤 정확하려면 1 년 내에 나노 초를 사용할 수 있습니다. 이것은 매 세기마다 0.5 초씩 움직인다 고 생각합니다. 그렇기 때문에 아직 오래 동안 좋았을 것입니다!

public TimeSpan MyYear 
{ 
    get 
    { 
     // Year = 3.1556926 × 10^16 nanoseconds 
     return new TimeSpan(31556926000000000); 
    } 
} 

+1

그리고 윤년에, 당신은 하루 종일 사람들이 기대할 것 인 하루 종일입니다. 신이 아닙니다. – oerkelens

관련 문제