1. 程式人生 > >C# 日期時間處理函式

C# 日期時間處理函式

# region 日期時間處理邏輯

// 將n轉化為2位符號數, 0-99 轉化為00-99
public static string TwoChar(int n)
{
    return (n < 10 ? "0" : "") + n;
}

// 獲取DateTime的日期部分:2005-06-07
public static string getDate(DateTime T)
{
    return T.Year + "-" + TwoChar(T.Month) + "-" + TwoChar(T.Day);
}

// 獲取DateTime的時間部分:12:23:34
public static string getTime(DateTime T)
{
    return TwoChar(T.Hour) + ":" + TwoChar(T.Minute) + ":" + TwoChar(T.Second);
}

// 將DateTime日期轉化為固定的日期格式: 2005-06-07 12:23:34
public static string ToString(DateTime T)
{
    return getDate(T) + " " + getTime(T);
    //DateTime.Now.ToString("yyyy-MM-dd  hh:mm:ss");
}

// 獲取當前時間如: 2005-06-07 12:23:34
public static string TimeNow()
{
    return ToString(DateTime.Now);
}

// 獲取相對於當前時間,days天后的日期,獲取date = "2005-6-7 12:23:34"
public static string TimeNowAdd(int days)
{
    DateTime Now = DateTime.Now;
    Now = Now.AddDays(days);

    string Time = ToString(Now);
    return Time;                               // "2016-5-26 12:23:34"
}

// 根據當前日期獲取 格式20160101型別的日期
public static string DateString()
{
    return getDate(DateTime.Now).Replace("-", "");
}

// DateTime.Compare(time1, time2);
// 從字串獲取日期
//string mytime = "2005-6-7 12:23:34";
public static DateTime parseDate(string date)
{
    //IFormatProvider culture = new System.Globalization.CultureInfo("zh-CN", true);
    //string[] expectedFormats = { "yyyy-MM-dd HH:mm:ss", "yyyy-MM-d HH:mm:ss", "yyyy-M-dd HH:mm:ss", "yyyy-M-dd HH:mm:ss" };
    //DateTime dateTime = DateTime.ParseExact(date, expectedFormats, culture, System.Globalization.DateTimeStyles.AllowInnerWhite);

    DateTime dateTime = DateTime.Parse(date);
    return dateTime;
}

// 對兩個字串日期進行比較
public static int Date_cmp(string str1, string str2)
{
    //DateTime date1 = Tool.parseDate("2005-6-07 12:23:34");
    //DateTime date2 = Tool.parseDate("2005-07-07 12:23:34");
    //return -1

    if (str2.Equals("0000-00-00 00:00:00")) return 1;
    DateTime date1 = Tool.parseDate(str1);
    DateTime date2 = Tool.parseDate(str2);

    return DateTime.Compare(date1, date2);
}

// 判定日期date是否在[date1到date2]之間,是返回true;
public static bool DateInRegion(string date, string date1, string date2)
{
    return (Date_cmp(date, date1) >= 0) && (Date_cmp(date, date2) <= 0);
}

// 判定日期date是否在(date1+minute到date1+minute+second]之間,是返回true;
public static bool DateInRegion(string date, string date1, int minute, int second)
{
    DateTime D = parseDate(date1).AddMinutes(minute);
    string d1 = ToString(D);
    string d2 = ToString(D.AddSeconds(second));

    return DateInRegion(date, d1, d2);
}


// 對兩個日期date1和date2進行比較
// date1 = 2016-05-27  date2 = 2016-05-29
public static long Shortdate_cmp(string date1, string date2)
{
    long d1 = long.Parse(date1.Replace("-", "").Replace("/", ""));
    long d2 = long.Parse(date2.Replace("-", "").Replace("/", ""));
    return d1 - d2;
}

// 獲取兩個日期之間的分鐘差值
public static long Sub_minite(string str1, string str2)
{
    DateTime date1 = Tool.parseDate(str1);
    DateTime date2 = Tool.parseDate(str2);

    return (date1.Ticks - date2.Ticks) / 10000 / 1000 / 60;
}

// 獲取某個日期的對應的毫秒值
public static long ms(DateTime time)
{
    return time.Ticks / 10000;
}

// 以日為週期,獲取date = "2005-6-7 12:23:34" 對應今日時間
public static string toTodayTime(string date)
{
    DateTime D = parseDate(date);            // 轉化date為日期
    string D_day = getDate(D);               // 獲取日期 "2005-06-07"
    string T_day = getDate(DateTime.Now);    // 今日日期 "2016-05-23"

    string todayTime = ToString(D).Replace(D_day, T_day);
    return todayTime;                       // "2016-5-23 12:23:34"
}

// 以周為週期,獲取date = "2005-6-7 12:23:34" 對應的本週日期時間
public static string toThisWeekTime(string date)
{
    DateTime D = parseDate(date);                       // 轉化date為日期
    string T1_day = getDate(D);
    DayOfWeek DayOfWeek1 = D.DayOfWeek;                 // 獲取日期為星期幾

    DateTime Now = DateTime.Now;
    DayOfWeek DayOfWeek2 = Now.DayOfWeek;               // 當前為星期幾
    Now = Now.AddDays(DayOfWeek1 - DayOfWeek2);
    string T2_day = getDate(Now);                       // 獲取D_day的本週日期 "2016/5/24"

    string weekTime = ToString(D).Replace(T1_day, T2_day);
    return weekTime;                                   // "2016-5-26 12:23:34"
}


// 以月為週期,獲取date = "2016-04-07 12:23:34" 對應的本月日期時間
public static string toThisMonthTime(string date)
{
    DateTime D = parseDate(date);                             // 轉化date為日期
    string T1_day = getDate(D);
    float days1 = DateTime.DaysInMonth(D.Year, D.Month);      // 獲取日期對應月份的總天數

    DateTime Now = DateTime.Now;
    float days2 = DateTime.DaysInMonth(Now.Year, Now.Month);  // 獲取本月的總天數
    int day = FloatToInt(D.Day * days2 / days1);              // 按總天數比例轉化為本月對應的某天
    string T2_day = Now.Year + "-" + Now.Month + "-" + day;   // 獲取D_day的本月日期 "2016-05-23"

    string monthTime = ToString(D).Replace(T1_day, T2_day);
    return monthTime;                                         // "2016-5-7 12:23:34"
}

// 浮點型,按四捨五入轉化為整數
public static int FloatToInt(float n)
{
    int m = (int)n;
    return n-m<0.5f ? m : m + 1;
}

#endregion