c#中DateTime類——日付編



//皆さんはレポートやクエリーをするときに、ユーザーにオプションの日付範囲を設定します(上記の図)//例えば、今年度の売上高、今四半期の利益、今月の新規顧客//C#に内蔵されているDateTimeは基本的にこれらの機能を実現することができます.DateTimeを巧みに使うと、これらのことを処理することができます//今日のDateTime.Now.Date.ToShortDateString();//昨日、今日の日付が1日減った.Now.AddDays(-1).ToShortDateString();//明日、同じ理屈で、DateTimeを追加します.Now.AddDays(1).ToShortDateString();//今週(今週の初日を知るには今日が何曜日かを知っておく必要があり、今週の初日が数日前の日であることがわかります.ここの毎週は日曜日から土曜日までDateTime.Now.AddDays(Convert.ToDouble)(0-Convert.ToInt 16(DateTime.Now.DayOfWeek))ToShortDateString(); DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();//DayOfWeekは数字の曜日を返しているので、漢字に変換して読みやすいようにしなければなりません.switchで一つ一つ対照する人もいるかもしれません.実はそんなに面倒なstring[]Day=new string[]{「日曜日」「月曜日」「火曜日」「水」「木曜日」「金曜日」「土曜日」}Day[Convert.ToInt 16(DateTime.Now.DayOfWeek)];//先週、同じように、1週間は7日で、先週は今週から7日減らして、来週も同じです.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString(); DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();//来週Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString(); DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();//今月、今月の初日は間違いなく1日、最終日は来月1日から1日減らすと言う人が多いです.もちろんこれは正しい//普通の書き方DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1";//初日Parse(DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1").AddMonths(1).AddDays(-1).ToShortDateString();//最終日//C#のToStringの文字フォーマットを巧みに使うほうが簡単ですDateTime.Now.ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1).ToShortDateString()
//先月、1ヶ月減らしました.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1).ToShortDateString(); DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();//来月、月を追加します.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).ToShortDateString(); DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(2).AddDays(-1).ToShortDateString();//7日後Now.Date.ToShortDateString(); DateTime.Now.AddDays(7).ToShortDateString();//7日前Now.AddDays(-7).ToShortDateString(); DateTime.Now.Date.ToShortDateString();//今年度は、ToStringの文字フォーマットで、今年度の初日と最終日を簡単に算出できます.Parse(DateTime.Now.ToString("yyyy-01-01")).ToShortDateString(); DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).AddDays(-1).ToShortDateString();//前年度はもう説明しなくてもいいだろうParse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1).ToShortDateString(); DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-1).ToShortDateString();//来年度はParse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).ToShortDateString(); DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(2).AddDays(-1).ToShortDateString();//今四半期、多くの人がここが難しいと思って、長い過程を書いて判断する必要があります.実は使わないで、私达はすべて1年の4つの四半期を知っていて、1つの四半期の3ヶ月//まず私达はまず日付を今四半期の第1ヶ月に押して、それから今月の第1日は今四半期の第1日ですDateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");//同じように、今四半期の最終日は次の四半期の初日にDateTimeを減らします.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();//次の四半期Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01"); DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();//前四半期Now.AddMonths(-3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01"); DateTime.Parse(DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
//どのようにしてその月に何日あるか
int m=System.DateTime.DaysInMonth(System.DateTime.Now.Year,System.DateTime.Now.Month);
//ある月の実際の平日を取得(つまり土曜日を除く)
//呼び出し//int days=getDays(System.DateTime.Now);private int getDays(System.DateTime date1){int m=System.DateTime.DaysInMonth(date1.Year,date1.Month);int mm=0;for(int i=1;i<=m;i++){System.DateTime date=Convert.ToDateTime(date1.Year+"-"+date1.Month+"-"+i);switch (date.DayOfWeek){case System.DayOfWeek.Monday:case System.DayOfWeek.Thursday:case System.DayOfWeek.Tuesday:case System.DayOfWeek.Wednesday:case System.DayOfWeek.Friday:mm=mm+1;break;
        }                }return mm;}
任意の2日間の有効な営業日(土日を除く)を取得任意の2日間の有効な営業日(土曜日を除く)を取得#region任意の2日間の有効な営業日(土曜日を除く)を取得
//呼び出し//DateTime date 1=Convert.ToDateTime("2005-10-20 ");//DateTime date2=Convert.ToDateTime("2005-11-01 ");//int days =getDays(date1,date2);private int getDays(System.DateTime date1,System.DateTime date2){string m=DateDiff(EnumDateCompare.day,date1,date2).ToString("f0");int mm=0;for(int i=0;i<=Convert.ToInt32(m);i++){System.DateTime date=Convert.ToDateTime(date1.AddDays(i));switch (date.DayOfWeek){case System.DayOfWeek.Monday:case System.DayOfWeek.Thursday:case System.DayOfWeek.Tuesday:case System.DayOfWeek.Wednesday:case System.DayOfWeek.Friday:mm=mm+1;break;}                }return mm;} #endregionは今週の土曜日と日曜日を獲得しました
ConvertDateToWeek#region ConvertDateToWeek
public static void ConvertDateToWeek(DateTime date,out DateTime firstdate,out DateTime lastdate)
{
DateTime first=System.DateTime.Now;
DateTime last=System.DateTime.Now;
switch (date.DayOfWeek)
{       case System.DayOfWeek.Monday:
first=date.AddDays(-1);
last=date.AddDays(5);
break;
case System.DayOfWeek.Tuesday:
first=date.AddDays(-2);
last=date.AddDays(4);
break;
case System.DayOfWeek.Wednesday:
first=date.AddDays(-3);
last=date.AddDays(3);
break;
case System.DayOfWeek.Thursday:
first=date.AddDays(-4);
last=date.AddDays(2);
break;
case System.DayOfWeek.Friday:
first=date.AddDays(-5);
last=date.AddDays(1);
break;
case System.DayOfWeek.Saturday:
first=date.AddDays(-6);
last=date;
break;
case System.DayOfWeek.Sunday:
first=date;
last=date.AddDays(6);
break;
}
firstdate=first;
lastdate=last;
}
#endregion

//呼び出し
DateTime firstdate=System.DateTime.Now;
DateTime lastdate=System.DateTime.Now;
ConvertDateToWeek(date,out firstdate,out lastdate);

取得現在の日付は、その年度の第数週目です.
DateTime dt = Convert.ToDateTime(" 2006-05-01 ");
int weeks = dt.DayOfYear / 7 + 1;

ソース:http://hi.baidu.com/marisa0208/blog/item/f7cc693442dd3a1890ef39de.html