一些 DateTime 處理函數

  • 7099
  • 0
  • C#
  • 2008-04-27

一些 DateTime 處理函數

做統計報表可能需要用到的日期處理函數:

  • GetTheHoursOfDay(): 某日期的 24 小時時刻列表
  • GetTheFirstDayOfWeek(): 某日期在該星期的第一天 (星期日)
  • GetTheLastDayOfWeek(): 某日期在該星期的最後一天 (星期六)
  • GetTheFirstDayOfMonth(): 某日期在該月份的第一天
  • GetTheLastDayOfMonth(): 取得某日期在該月份的最後一天
  • GetTheFirstDaysOfWeekInMoth(): 某日期在該月份每周的第一天列表
  • GetTheFirstDayOfQuarter(): 某日期在該季的第一天
  • GetTheLastDayOfQuarter(): 某日期在該季的最後一天
  • GetTheFirstDaysOfMonthInQuarter(): 取得某日期在該季每個月的第一天列表
  • GetTheFirstDayOfYear(): 某日期在當年的第一天
  • GetTheLastDayOfYear(): 某日期在當年的最後一天
  • GetTheFirstDaysOfQuarterInYear(): 某日期於當年每一季的第一天列表

 

/// <summary>
/// 取得某日期的 24 小時時刻列表
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期的 24 小時時刻列表</returns>
public static DateTime[] GetTheHoursOfDay(DateTime dt)
{
    List<DateTime> dtList = new List<DateTime>();
 
    for (int i = 0; i < 24; i++)
    {
        dtList.Add(new DateTime(dt.Year, dt.Month, dt.Day, i, 0, 0));
    }
 
    return dtList.ToArray();
}
 
/// <summary>
/// 取得某日期在該星期的第一天 (星期日)
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期在該星期的第一天 (星期日)</returns>
public static DateTime GetTheFirstDayOfWeek(DateTime dt)
{
    return dt.AddDays((int) dt.DayOfWeek*-1).Date;
}
 
/// <summary>
/// 取得某日期在該星期的最後一天 (星期六)
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期在該星期的最後一天 (星期六)</returns>
public static DateTime GetTheLastDayOfWeek(DateTime dt)
{
    return dt.AddDays(7 + (int) dt.DayOfWeek*-1 - 1).Date;
}
 
/// <summary>
/// 取得某日期在該月份的第一天 (1 號)
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期在該月份的第一天</returns>
public static DateTime GetTheFirstDayOfMonth(DateTime dt)
{
    return new DateTime(dt.Year, dt.Month, 1);
}
 
/// <summary>
/// 取得某日期在該月份的最後一天
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期在該月份的最後一天</returns>
public static DateTime GetTheLastDayOfMonth(DateTime dt)
{
    return new DateTime(dt.Year, dt.Month + 1, 1).AddDays(-1);
}
 
/// <summary>
/// 取得某日期在該月份每周的第一天列表
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期在該月份每周的第一天列表</returns>
public static DateTime[] GetTheFirstDaysOfWeekInMoth(DateTime dt)
{
    List<DateTime> dtList = new List<DateTime>();
 
    DateTime dtTemp = GetTheFirstDayOfWeek(GetTheFirstDayOfMonth(dt)).Date;
    DateTime dtEnd = GetTheLastDayOfMonth(dt).Date;
 
    for (int i = 0; i < 6; i++)
    {
        if (dtTemp.AddDays(i*7) <= dtEnd)
        {
            dtList.Add(dtTemp.AddDays(i*7));
        }
    }
 
    return dtList.ToArray();
}
 
/// <summary>
/// 取得某日期在該季的第一天
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期在該季的第一天</returns>
public static DateTime GetTheFirstDayOfQuarter(DateTime dt)
{
    if (dt >= new DateTime(dt.Year, 1, 1) && dt <= new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
    {
        return new DateTime(dt.Year, 1, 1);
    }
    else if (dt >= new DateTime(dt.Year, 4, 1) && dt <= new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
    {
        return new DateTime(dt.Year, 4, 1);
    }
    else if (dt >= new DateTime(dt.Year, 7, 1) && dt <= new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
    {
        return new DateTime(dt.Year, 7, 1);
    }
    else
    {
        return new DateTime(dt.Year, 10, 1);
    }
}
 
/// <summary>
/// 取得某日期在該季的最後一天
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期在該季的最後一天</returns>
public static DateTime GetTheLastDayOfQuarter(DateTime dt)
{
    if (dt >= new DateTime(dt.Year, 1, 1) && dt <= new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
    {
        return new DateTime(dt.Year, 3, DateTime.DaysInMonth(dt.Year, dt.Month));
    }
    else if (dt >= new DateTime(dt.Year, 4, 1) && dt <= new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
    {
        return new DateTime(dt.Year, 6, DateTime.DaysInMonth(dt.Year, dt.Month));
    }
    else if (dt >= new DateTime(dt.Year, 7, 1) && dt <= new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month), 23, 59, 59))
    {
        return new DateTime(dt.Year, 9, DateTime.DaysInMonth(dt.Year, dt.Month));
    }
    else
    {
        return new DateTime(dt.Year, 12, DateTime.DaysInMonth(dt.Year, dt.Month));
    }
}
 
/// <summary>
/// 取得某日期在該季每個月的第一天列表
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>取得某日期在該季每個月的第一天列表</returns>
public static DateTime[] GetTheFirstDaysOfMonthInQuarter(DateTime dt)
{
    List<DateTime> dtList = new List<DateTime>();
 
    DateTime dtTemp = GetTheFirstDayOfQuarter(dt);
    DateTime dtEnd = GetTheLastDayOfQuarter(dt);
 
    for (int i = 0; i < 3; i++)
    {
        if (new DateTime(dt.Year, dtTemp.AddMonths(i).Month, 1) <= dtEnd)
        {
            dtList.Add(new DateTime(dt.Year, dtTemp.AddMonths(i).Month, 1));
        }
    }
 
    return dtList.ToArray();
}
 
/// <summary>
/// 取得某日期在當年的第一天
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期在當年的第一天</returns>
public static DateTime GetTheFirstDayOfYear(DateTime dt)
{
    return new DateTime(dt.Year, 1, 1);
}
 
/// <summary>
/// 取得某日期在當年的最後一天
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期在當年的最後一天</returns>
public static DateTime GetTheLastDayOfYear(DateTime dt)
{
    return new DateTime(dt.Year, 12, DateTime.DaysInMonth(dt.Year, 12));
}
 
/// <summary>
/// 取得某日期於當年每一季的第一天列表
/// </summary>
/// <param name="dt">某日期</param>
/// <returns>某日期於當年每一季的第一天列表</returns>
public static DateTime[] GetTheFirstDaysOfQuarterInYear(DateTime dt)
{
    List<DateTime> dtList = new List<DateTime>();
    dtList.Add(new DateTime(dt.Year, 1, 1));
    dtList.Add(new DateTime(dt.Year, 4, 1));
    dtList.Add(new DateTime(dt.Year, 7, 1));
    dtList.Add(new DateTime(dt.Year, 10, 1));
 
    return dtList.ToArray();
}