퇴근5분전

훈스 C#게시판에 올라온 글에 대한 답변을 찾아보던 중,..

VB에 Format(일수, "mm" )  이란 함수를 호출하면 일자에 맞는 기간을 출력해준다고 한다
예)
     399  를 넣으면  "1년 1개월 3일" 이 나온다고 한다.

머리를 조낸 굴려봐도 지원되는 객체는 안보인다..

기간에 해당하는것 하면 TimeSpan이 바로 떠오르는데...

TimeSpan에서 출력해주는 건 전혀 없다.

아래와 같이 직접 구해야 하는듯 하다.


TimeSpan.Zero ~ TimeSpan.FormDays( 일수 ) 만큼에 Tick값으로

DateTime을 생성하면  DateTime의 초기값 1년 1월 1일 ~ 계산되어 만들어진다.

DateTimeOffset객체에서 ToOffSet(  TimeSpan  ); 메서드를 이용해볼까 했었는데...

이거자체가 DateTime때문에 에러가 뜨게 되므로...
직접 포멧을 지정해야한다. 

          double day = 399;
          DateTimeOffset off = new DateTime(TimeSpan.FromDays( day ).Ticks );
          MessageBox.Show(string.Format("{0}년 {1}개월 {2}일", off.Year - 1, off.Month - 1, off.Day - 1));

DateTimeOffset 은 그냥 ... 알게된 객체이므로... 써본다.
http://msdn.microsoft.com/ko-kr/library/system.datetimeoffset_members.aspx



추가적으로 WPF 게시판에 올라왔던 답변을 좀 허접하게 달았던 내용을
다음과 같이 처리한다.

질문내용은 두날짜간에 개월수 차이를 구하여 컬럼으로 표시하고자 하는 부분이었으나

처음 단 답글은 년차를 월에 포함하지 못하는 상황과 약간에 판단착오가 있었다.
이에 대해.. 위 기간 구하는것을 참고하여 아래와 같이 바꾸고 그 답변에 대해 알림형태로 게시판에 남겼다.

            DateTime dt = new DateTime(2001, 2, 1);
            DateTime dt2 = new DateTime( Math.Abs( ( new DateTime(2002, 2, 27).Subtract( dt ).Ticks ) ) );
            MessageBox.Show((      ((dt2.Year-1) * 12) + ( dt2.Month )     ).ToString());