using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace WindowsFormsApplication3
{
class DateTimeHelp
{
/// <summary>
/// 获取系统当前时间,返回string类型
/// </summary>
/// <returns></returns>
public static string SysDateTime()
{
string sysdatetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
return sysdatetime;
}
/// <summary>
/// 获取系统当前时间的前一天,返回string类型
/// </summary>
/// <returns></returns>
public static string SysBeforeDay() {
string sysbeforeday = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
return sysbeforeday;
}
/// <summary>
/// 获取系统当前小时减一小时即前一小时时间,返回string类型
/// </summary>
/// <returns></returns>
public static string SysBeforeHour()
{
string sysbeforehour = DateTime.Now.AddHours(-1).ToString("yyyy-MM-dd HH");
return sysbeforehour;
}
/// <summary>
/// 获取系统当前月减一月即上一月,返回string类型
/// </summary>
/// <returns></returns>
public static string SysBeforeMonth()
{
string sysbeforemonth = DateTime.Now.AddMonths(-1).ToString("yyyy-MM");
return sysbeforemonth;
}
/// <summary>
/// 获取系统当前月开始日期,返回string类型
/// </summary>
/// <returns></returns>
public static string SysMonthStartTime()
{
DateTime dt = DateTime.Now;
DateTime dt_First = dt.AddDays(1 - (dt.Day));
string sysmonthstarttime =dt_First.ToString("yyyy-MM-dd");
return sysmonthstarttime;
}
/// <summary>
/// 获取系统当前月结束日期,返回string类型
/// </summary>
/// <returns></returns>
public static string SysMonthEndTime()
{
DateTime dt = DateTime.Now;
//本月第一天时间
DateTime dt_First = dt.AddDays(1 - (dt.Day));
//获得某年某月的天数
int year = dt.Date.Year;
int month = dt.Date.Month;
int dayCount = DateTime.DaysInMonth(year, month);
//本月最后一天时间
DateTime dt_Last = dt_First.AddDays(dayCount - 1);
string sysmonthendtime = dt_Last.ToString("yyyy-MM-dd");
return sysmonthendtime;
}
/// <summary>
/// 获取系统当前季度开始日期,返回string类型
/// </summary>
/// <returns></returns>
public static string SysQuarterStartTime()
{
DateTime dt = DateTime.Now;
DateTime startquarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day); //本季度初
DateTime endQuarter = startquarter.AddMonths(3).AddDays(-1); //本季度末
string sysquarterstarttime = startquarter.ToString("yyyy-MM-dd");
return sysquarterstarttime;
}
/// <summary>
/// 获取系统当前季度结束日期,返回string类型
/// </summary>
/// <returns></returns>
public static string SysQuarterEndTime()
{
DateTime dt = DateTime.Now;
DateTime startquarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day); //本季度初
DateTime endQuarter = startquarter.AddMonths(3).AddDays(-1); //本季度末
string sysquarterendtime = endQuarter.ToString("yyyy-MM-dd");
return sysquarterendtime;
}
/// <summary>
/// 获取系统当前周开始日期,返回string类型
/// </summary>
/// <returns></returns>
public static string SysWeekStartTime()
{
DateTime dt = DateTime.Now; //当前时间
DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d"))); //本周周一
string sysweekstarttime = startWeek.ToString("yyyy-MM-dd");
return sysweekstarttime;
}
/// <summary>
/// 获取系统当前周结束日期,返回string类型
/// </summary>
/// <returns></returns>
public static string SysWeekEndTime()
{
DateTime dt = DateTime.Now; //当前时间
DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d"))); //本周周一
DateTime endWeek = startWeek.AddDays(6); //本周周日
string sysweekendtime = startWeek.ToString("yyyy-MM-dd");
return sysweekendtime;
}
/// <summary>
/// 获取当月有多少天,返回int类型
/// </summary>
/// <returns></returns>
public static int SysMonthDays()
{
int sysmonthdays = System.DateTime.DaysInMonth(System.DateTime.Now.Year, System.DateTime.Now.Month);
return sysmonthdays;
}
/// <summary>
/// 获取某月的实际工作日(即不包括周六日)
/// </summary>
/// <param name="date1"></param>
/// <returns></returns>
public static 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;
}
/// <summary>
/// 怎么样计算两个日期相差的年、月份、日期、小时、分钟 、妙等
/// </summary>
public enum EnumDateCompare
{
year = 1,
month = 2,
day = 3,
hour = 4,
minute = 5,
second = 6
}
/// <summary>
/// 怎么样计算两个日期相差的年、月份、日期、小时、分钟 、妙等
/// </summary>
/// <param name="howtocompare"></param>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public static double DateDiff(EnumDateCompare howtocompare, System.DateTime startDate, System.DateTime endDate)
{
double diff = 0;
System.TimeSpan TS = new System.TimeSpan(endDate.Ticks - startDate.Ticks);
switch (howtocompare)
{
case EnumDateCompare.year:
diff = Convert.ToDouble(TS.TotalDays / 365);
break;
case EnumDateCompare.month:
diff = Convert.ToDouble((TS.TotalDays / 365) * 12);
break;
case EnumDateCompare.day:
diff = Convert.ToDouble(TS.TotalDays);
break;
case EnumDateCompare.hour:
diff = Convert.ToDouble(TS.TotalHours);
break;
case EnumDateCompare.minute:
diff = Convert.ToDouble(TS.TotalMinutes);
break;
case EnumDateCompare.second:
diff = Convert.ToDouble(TS.TotalSeconds);
break;
}
return diff;
}
/// <summary>
/// 获得任意两日期之间的有效工作日(不包括周六日)
/// </summary>
/// <param name="date1"></param>
/// <param name="date2"></param>
/// <returns></returns>
public static int getsubtractionDays(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;
}
/// <summary>
/// 获得当前日期是该年度的第几周
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static int SysDayIsWeek(System.DateTime date)
{
DateTime dt = Convert.ToDateTime(date);
int weeks = dt.DayOfYear / 7 + 1;
return weeks;
}
/// <summary>
/// 获得当前年有多少周
/// </summary>
/// <param name="year"></param>
/// <returns></returns>
public static int GetWeekOfYear(int year)
{
DateTime the_Date = new DateTime(year, 1, 1);//本年的第一天
TimeSpan tt = the_Date.AddYears(1) - the_Date;//求出本年有几天
int zs = tt.Days / 7 + 1;
return zs; //因为年只有366天和365天除以7有余数所以始终需要加一周
}
/// <summary>
/// 两个时间段日期相减得到小时、分钟、秒、毫秒
/// </summary>
/// <param name="date1"></param>
/// <param name="date2"></param>
/// <returns></returns>
public static string getSubtractionTime(string date1,string date2)
{
DateTime dtone = Convert.ToDateTime(date1);
DateTime dtwo = Convert.ToDateTime(date2);
TimeSpan span = dtwo.Subtract(dtone); //算法是dtwo 减去 dtone
//string subtracktiontime = span.Hours + "小时" + span.Minutes + "分钟" + span.Seconds + "秒";
// string subtracktiontime = span.TotalMinutes.ToString();
// string subtracktiontime = span.TotalSeconds.ToString();
string subtracktiontime =span.TotalHours.ToString()+"小时"+ span.TotalMinutes.ToString() + "分钟" + span.TotalSeconds.ToString() +"秒"+ span.TotalMilliseconds.ToString() + "毫秒";
return subtracktiontime;
// tss.Text = span.Days + "天" + span.Hours + "小时" + span.Minutes + "分钟" + span.Seconds + "秒" + span.TotalDays;
}
/// <summary>
/// 获得当前年每周周编号和周起止日期(以周一为周开始,周日为周结束),返回string类型
/// </summary>
/// <param name="year"></param>
/// <returns></returns>
public static string GetWeekDate(int year)
{
string zqsrq = "";
// int n = 6,w=1;
// DateTime s = DateTime.Parse(year.ToString() + "-1" + "-1");
// int x = (int)s.DayOfWeek; //1月1日星期几
// s = s.AddDays(-x); //第一周起始日(周日)
// DateTime e = s.AddDays(n); //第一周终止日(周六)
//string zqsr="第{0}周起始日:{1:D} 终止日:{2:D}"+w+s+e+"/r/n" ;
// while (e<DateTime.Parse(year.ToString() + "-12" + "-31"))
// {
// s = e.AddDays(1);
// e = s.AddDays(n);
// w++;
// zqsrq += "第"+w+"周 "+"周起始日期" + s+" 周终止日期" + e+"";
// }
int n = 6, w = 1;
DateTime s = DateTime.Parse(year.ToString() + "-1" + "-1");
int x = (int)s.DayOfWeek; //1月1日星期几
s = s.AddDays(-x + 1); //+1表示第一周起始日期为(周一) 不+1 表示第一周起始日期为(周日)
DateTime e = s.AddDays(n); // +1表示第一周终止日期为(周一) 不+1 表示第一周终止日为(周日)
while (e.Year < year + 1)
{
s = e.AddDays(1);
e = s.AddDays(n);
w++;
zqsrq += "第" + w + "周 " + "周起始日期" + s + " 周终止日期" + e + "";
}
return zqsrq;
}
}
}