DateTime today = DateTime.Today;
// 1일 날짜를 가져오는 방법: (3월 1일 목요일)
DateTime first_day = today.AddDays(1 - today.Day);
// 첫번째 주의 일요일을 가져오는 방법: (2월 25일 일요일)
DateTime first_sunday = first_day.AddDays(0 - (int)(first_day.DayOfWeek));
// 첫번째 주의 일수를 가져오는 방법: (3일)
int first_week_day_count = 7 - (int)(first_day.DayOfWeek);
// 말일 날짜를 가져오는 방법: (3월 31일 토요일)
DateTime last_day = today.AddMonths(1).AddDays(0 - today.Day);
// 마지막 주의 일요일을 가져오는 방법: (3월 25일 일요일)
DateTime last_sunday = last_day.AddDays(0 - (int)(last_day.DayOfWeek));
// 마지막 주의 일수를 가져오는 방법: (7일)
int last_week_day_count = last_day.DayOfYear - last_sunday.DayOfYear + 1;
// 이번 달의 주수를 가져오는 방법: (5주)
int this_month_week_count = ((last_sunday.DayOfYear - first_sunday.DayOfYear) / 7) + 1;
//이번달의 주차를 안다.
private int GetMonthWeekly(DateTime Date)
{
int i_Days = Date.Day;
DateTime DateTemp = new DateTime((int)Date.Year, (int)Date.Month,1);
int count = 1;
for (int i = 1; i <= i_Days; i++)
{
if (DateTemp.DayOfWeek == DayOfWeek.Sunday)
{
if(i>1) /첫날이 일요일이면 증가하지 않는다.
count++;
}
DateTemp = DateTemp.AddDays(1);
}
return count;
}
// 해당일자의 주수를 가져오는 방법:
private string GetJuCha(DateTime Date)
{
System.Globalization.CultureInfo myCI = new System.Globalization.CultureInfo("en-US");
return myCI.Calendar.GetWeekOfYear
(Date,System.Globalization.CalendarWeekRule.FirstFourDayWeek,System.DayOfWeek.Sunday).ToString();
}
//*****************************//
이번달의 주 수를 알고자 할 때 또다른 방법
private int GetWeekCount(int year, int month)
{
int days = DateTime.DaysInMonth(year, month);
DateTime DateTemp = new DateTime(year, month, 1);
int count = 1;
for (int i = 1 ; i <= days ; i++)
{
if (DateTemp.DayOfWeek == DayOfWeek.Sunday)
{
if(i>1)///첫날이 일요일이면 증가하지 않는다.
count++;
}
DateTemp = DateTemp.AddDays(1);
}
return count;
}
/************ 월이 바뀌면서 그 주의 주차 일자 알기
//선택한 날의 일요일부터 토요일까지 (그 주의 날자 정보를 안다.)
string sStartWeekDay = string.Empty;//선택한 주의 일요일
string sEndWeekDay = string.Empty;//선택한 주의 토요ㅣㄹ
sNowWeek=DataTime.Now 의 주차
GetSundaySaturDay(DataTime.Now,sNowWeek,sStartWeekDay,sEndWeekDay);
private void GetSundaySaturDay(DateTime chooseDate, int sNowWeek, ref string sStartWeekDay, ref string sEndWeekDay)
{
//1일부터 말일까지 루프돌면서 해당주의 일요일부터 토요일까지 안다.
int i_Days = chooseDate.Day;
DateTime DateTemp = new DateTime((int)chooseDate.Year, (int)chooseDate.Month, 1);
int weekCount = 1;
if (i_Days == 1)
{
if (DateTemp.DayOfWeek == DayOfWeek.Sunday)
{
sStartWeekDay = DateTemp.Date.ToShortDateString();
sEndWeekDay = DateTemp.AddDays(7).Date.ToShortDateString();
return;
}
else
{
DateTime dPreMonthWeekDate=DateTemp.AddDays(0 - (int)(DateTemp.DayOfWeek));
sStartWeekDay = dPreMonthWeekDate.ToShortDateString();
sEndWeekDay = dPreMonthWeekDate.AddDays(7).ToShortDateString();
return;
}
}
else
{
for (int i = 1; i <= i_Days; i++)
{
if (DateTemp.DayOfWeek == DayOfWeek.Sunday)
{
if (i > 1) //첫날이 일요일이면 증가하지 않는다.
weekCount++;
}
if (sNowWeek == weekCount)
{
sStartWeekDay = DateTemp.Date.ToShortDateString();
sEndWeekDay = DateTemp.AddDays(7).Date.ToShortDateString();
break;
}
DateTemp = DateTemp.AddDays(1);
}
}
private void InitCalendar(int count)
{
string strYear = strStandMonth.Substring(0, 4);
string strMonth = strStandMonth.Substring(4, strStandMonth.Length - 4);
FarPoint.Win.Spread.GridLine gl = new FarPoint.Win.Spread.GridLine(FarPoint.Win.Spread.GridLineType.None, Color.Red);
fpSpread1.ActiveSheet.HorizontalGridLine = gl;
//현재 월의 날짜수
int nCalander_DayCount = DateTime.DaysInMonth(Convert.ToInt16(strYear), Convert.ToInt16(strMonth));
//해당월1일의 요일
int nFirstWeek = Microsoft.VisualBasic.DateAndTime.Weekday(Convert.ToDateTime(Convert.ToInt16(strYear) + "-" + Convert.ToInt16(strMonth) + "-" + "01"), FirstDayOfWeek.Sunday);
//해당월 말일의 요일
int nLastWeek = Microsoft.VisualBasic.DateAndTime.Weekday(Convert.ToDateTime(Convert.ToInt16(strYear) + "-" + Convert.ToInt16(strMonth) + "-" + nCalander_DayCount), FirstDayOfWeek.Sunday);
//해당월의
int nRow = 1;
//현재의 월
DateTime month = Convert.ToDateTime(Convert.ToInt16(strYear) + "-" + Convert.ToInt16(strMonth) + "-" + "01");
DateTime first_day = month.AddDays(1 - month.Day);
DateTime last_day = month.AddMonths(1).AddDays(0 - month.Day);
DateTime last_sunday = last_day.AddDays(0 - (int)(last_day.DayOfWeek));
DateTime first_sunday = first_day.AddDays(0 - (int)(first_day.DayOfWeek));
int this_month_week_count = ((last_sunday.DayOfYear - first_sunday.DayOfYear) / 7) + 1;
//주 단위
for (int i = 0; i <= 6 * (count + 1); i = i + count)
{
//말일이 토요일인경우 빈row가 추가되는 것을 막는다.
if (nRow - 1 == nCalander_DayCount && nLastWeek.ToString() == "7")
{
return;
}
//한줄추가
SpreadUnBoundUtil.AddRowsLast(fpSpread1, 1); //월표시나는곳
dt.Rows.Add(dt.NewRow());
//일 단위
for (int j = 0; j < fpSpread1.ActiveSheet.ColumnCount; j++)
{
//해당 1일의 요일이 되기전의 요일을 ""로 채워준다.
if (i == 0 && j < nFirstWeek - 1)
{
UtilLibrary.Spread.SetValue(fpSpread1, i, j, "");
dt.Rows[i][j] = "";
}
else
{
if (nRow <= nCalander_DayCount)
{
dt.Rows[dt.Rows.Count - 1][j] = (nRow.ToString().Length == 1 ? "0" + nRow.ToString() : nRow.ToString());
UtilLibrary.Spread.SetValue(fpSpread1, fpSpread1.ActiveSheet.RowCount - 1, j, nRow++.ToString());
//일요일 표시
if (j == 0)
{
fpSpread1.ActiveSheet.Cells[fpSpread1.ActiveSheet.RowCount - 1, j].ForeColor = Color.Red;
}
//토요일표시
if (j == 6)
{
fpSpread1.ActiveSheet.Cells[fpSpread1.ActiveSheet.RowCount - 1, j].ForeColor = Color.Blue;
}
//셀잠금
fpSpread1.ActiveSheet.Cells[fpSpread1.ActiveSheet.RowCount - 1, j].Locked = true;
//정렬
fpSpread1.ActiveSheet.Cells[fpSpread1.ActiveSheet.RowCount - 1, j].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Left;
FarPoint.Win.BevelBorder bevelbrdr = new FarPoint.Win.BevelBorder(FarPoint.Win.BevelBorderType.Raised, Color.Black, Color.Black,1,false,false,false,true);
fpSpread1.ActiveSheet.Cells[fpSpread1.ActiveSheet.RowCount - 1, j].Border = bevelbrdr;
}
else
{
if (fpSpread1.ActiveSheet.RowCount >= 6 * (count + 1))
{
//갯수가초과했는데 현재 주가 6주인경우
if (this_month_week_count != 6)
{
fpSpread1.ActiveSheet.RemoveRows(fpSpread1.ActiveSheet.RowCount - (2 + count), count + 2);
//fpSpread1.ActiveSheet.RemoveRows(fpSpread1.ActiveSheet.RowCount - 1, 1);
// dt.Rows.RemoveAt(dt.Rows.Count - 1);
fnRemoveDsRow(dt, count + 2);
}
else //6주인경우 1개만 지워준다.
{ //선증가 후처리이기때문
fpSpread1.ActiveSheet.RemoveRows(fpSpread1.ActiveSheet.RowCount - 1, 1);
dt.Rows.RemoveAt(dt.Rows.Count - 1);
}
return;
}
}
}
}
SpreadUnBoundUtil.AddRowsLast(fpSpread1, count); //월표시나는곳
addrow(dt, count + 1);
}
}
'개발 관련 글' 카테고리의 다른 글
암호화/복호화 (0) | 2012.01.31 |
---|---|
[C#]보다 빠르게 썸네일이미지 만드는 방법 (0) | 2012.01.31 |
동적으로 메서드 실행 (0) | 2011.08.09 |
MS Chart Control (0) | 2011.08.09 |
[C#] 글 읽어주는 메모장 만들기 (0) | 2011.08.02 |