系列文章
C#底层库–记录日志帮助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124187709
C#底层库–数据库访问帮助类(MySQL版)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379
C#底层库–获取文件版本和MD5值
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871
C#底层库–操作文件帮助类FileHelper(获取目录的所有文件)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126887161
C#底层库–操作Excel帮助类(读取、导出表格)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126887445
C#底层库–软件版本管理XML
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110195766
C#底层库–随机数生成类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126888812
C#底层库–正则表达式帮助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/109745286
C#底层库–CSV和DataTable相互转换
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128804367
C#底层库–Image图片操作类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805298
C#底层库–JSON序列化、反序列化扩展类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805705
C#底层库–cookie操作辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816347
C#底层库–Session操作辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817096
C#底层库–数据实体类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638
C#底层库–Image图片操作类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805298
C#底层库–数据库类型与程序类型转换类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817610
文章目录
- 系列文章
- 前言
- 一、底层库介绍
- 二、底层库源码
- 2.1 创建类DatePeriod.cs日期枚举型
- 2.2 创建类StringExt.cs字符串扩展
- 2.3 创建类BizHandler.cs
- 2.4 创建类DateTimeExtension.cs
- 2.5 创建类DateTimeUtils.cs
- 三、调用方法
- 三、项目案列
前言
本专栏为【底层库】,将介绍研发过程中 通用的函数。我们将这些固化的源码,进行重写、规范封装、单元测试、集成测试,从而形成通用化模块库,本专栏称为“底层库”。
作为研发人员的你,并不需要花大量时间,完全掌握“底层库”的含义,你只需要几行调用代码,就可以解决一些项目上碰到的难题。大家有任何问题,可以评论区反馈,私信我。
底层库已实现功能:数据库操作、加解密算法、日志记录、HTTP通信、Socket通信、API前后端交互、邮件发送、文件操作、配置参数存储、Excel导入导出、CSV和DataTable转换、压缩解压、自动编号、Session操作等,
一、底层库介绍
DateTimeExtension.cs日期扩展类,本类的最要用途:用户日期查询,可以设置“下拉框”查找项,通过本底层库,可以自动获取“开始日期”、“结束日期”。
可实现功能:本年、上年、本月、上月、本周、上周、今天、默认日、空日期、下周、下月、下年、昨天、财务月、财务上月、财务下月。
本底层库已经集成封装,以下展示的是库源代码。
二、底层库源码
2.1 创建类DatePeriod.cs日期枚举型
using System;
namespace WBF.Utils
{
public enum DatePeriod
{
ThisYear,
LastYear,
ThisMonth,
LastMonth,
ThisWeek,
LastWeek,
Custom,
None,
NextWeek,
NextMonth,
NextYear,
Yesterday,
Today,
AccountThisMonth,
AccountLastMonth,
AccountNextMonth
}
}
2.2 创建类StringExt.cs字符串扩展
创建类StringExt.cs,用于字符串拼接,加引号,部分代码。
namespace WBF.Utils
{
public static class StringExt
{
/// <summary>
/// 给字符串两边添加单引号(同时会将内部单引号替换成双单引号)
/// </summary>
/// <param name="S"></param>
/// <returns></returns>
public static string QuotedStr(this string S)
{
return "'" + S.Replace("'", "''") + "'";
}
/// <summary>
/// 给字符串两边添加括号
/// </summary>
/// <param name="str">字符串</param>
/// <returns>返回带括号的字符串</returns>
public static string BracketStr(this string S)
{
return "(" + S + ")";
}
/// <summary>
/// 使用And连接两个SQL条件
/// </summary>
/// <param name="strCondition1"></param>
/// <param name="strCondition2"></param>
/// <returns></returns>
public static string ConcatSQL(this string S, string strCondition2)
{
if (S.Trim() == "" || strCondition2.Trim() == "")
{
return S + strCondition2;
}
return S + " and " + strCondition2;
}
}
}
2.3 创建类BizHandler.cs
using System;
namespace WBF.Utils
{
public class BizHandler
{
public static DateTime GetSettleMonthStartDate()
{
//return BizHandler.GetSettleMonthStartDate(SysParams.Instance.loginInfo.LoginTime);
return BizHandler.GetSettleMonthStartDate(DateTime.Now);
}
public static DateTime GetSettleMonthStartDate(DateTime a_dtDay)
{
int day = a_dtDay.Day;
//string value = SysParams.Instance.SysPar.GetValue("CW_AccoutIsNaturalMonth");
string value = "F";
if (string.Compare(value, "T", true) == 0)
{
return a_dtDay.Date.AddDays((double)(checked(0 - day + 1)));
}
//int num = (int)Convert.ToInt16(SysParams.Instance.SysPar.GetValue("month_start_day"));
int num = 0;
if (num == 0)
{
num = 1;
}
DateTime dateTime = new DateTime(a_dtDay.Year, a_dtDay.Month, 1);
DateTime d = dateTime.AddMonths(1);
DateTime d2 = dateTime.AddMonths(-1);
TimeSpan timeSpan = d - dateTime;
TimeSpan timeSpan2 = dateTime - d2;
DateTime dateTime2;
if ((double)num > timeSpan2.TotalDays)
{
dateTime2 = new DateTime(dateTime.Year, dateTime.Month, 1);
}
else if ((double)num > timeSpan.TotalDays)
{
dateTime2 = new DateTime(d2.Year, d2.Month, num);
}
else
{
dateTime2 = new DateTime(a_dtDay.Year, a_dtDay.Month, num);
}
if (dateTime2 > a_dtDay)
{
dateTime2 = dateTime2.AddMonths(-1);
}
return dateTime2;
}
}
}
2.4 创建类DateTimeExtension.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WBF.Utils
{
public static class DateTimeExtension
{
public static void GetSearchDate(DatePeriod a_DatePeriod, out DateTime a_dtStartDate, out DateTime a_dtEndDate)
{
//DateTime dateTime = SysParams.Instance.loginInfo.LoginTime.Date;
DateTime dateTime = DateTime.Now.Date;
a_dtStartDate = dateTime;
a_dtEndDate = dateTime;
switch (a_DatePeriod)
{
case DatePeriod.ThisYear:
a_dtStartDate = new DateTime(dateTime.Year, 1, 1);
a_dtEndDate = new DateTime(dateTime.Year, 12, 31);
return;
case DatePeriod.LastYear:
dateTime = dateTime.AddYears(-1);
a_dtStartDate = new DateTime(dateTime.Year, 1, 1);
a_dtEndDate = new DateTime(dateTime.Year, 12, 31);
return;
case DatePeriod.ThisMonth:
a_dtStartDate = new DateTime(dateTime.Year, dateTime.Month, 1);
a_dtEndDate = a_dtStartDate.AddMonths(1).AddDays(-1.0);
return;
case DatePeriod.LastMonth:
dateTime = dateTime.AddMonths(-1);
a_dtStartDate = new DateTime(dateTime.Year, dateTime.Month, 1);
a_dtEndDate = a_dtStartDate.AddMonths(1).AddDays(-1.0);
return;
case DatePeriod.ThisWeek:
DateTimeExtension.GetWeekRange(dateTime, out a_dtStartDate, out a_dtEndDate);
return;
case DatePeriod.LastWeek:
dateTime = dateTime.AddDays(-7.0);
DateTimeExtension.GetWeekRange(dateTime, out a_dtStartDate, out a_dtEndDate);
return;
case DatePeriod.Custom:
break;
case DatePeriod.None:
a_dtStartDate = new DateTime(1900, 1, 1);
a_dtEndDate = new DateTime(1900, 1, 1);
return;
case DatePeriod.NextWeek:
dateTime = dateTime.AddDays(7.0);
DateTimeExtension.GetWeekRange(dateTime, out a_dtStartDate, out a_dtEndDate);
return;
case DatePeriod.NextMonth:
dateTime = dateTime.AddMonths(1);
a_dtStartDate = new DateTime(dateTime.Year, dateTime.Month, 1);
a_dtEndDate = a_dtStartDate.AddMonths(1).AddDays(-1.0);
return;
case DatePeriod.NextYear:
dateTime = dateTime.AddYears(1);
a_dtStartDate = new DateTime(dateTime.Year, 1, 1);
a_dtEndDate = new DateTime(dateTime.Year, 12, 31);
return;
case DatePeriod.Yesterday:
a_dtStartDate = dateTime.AddDays(-1.0);
a_dtEndDate = dateTime.AddDays(-1.0);
return;
case DatePeriod.Today:
a_dtStartDate = dateTime;
a_dtEndDate = dateTime;
return;
case DatePeriod.AccountThisMonth:
{
DateTime settleMonthStartDate = BizHandler.GetSettleMonthStartDate();
a_dtStartDate = settleMonthStartDate;
a_dtEndDate = settleMonthStartDate.AddMonths(1).AddDays(-1.0);
return;
}
case DatePeriod.AccountLastMonth:
{
DateTime settleMonthStartDate = BizHandler.GetSettleMonthStartDate();
a_dtStartDate = settleMonthStartDate.AddMonths(-1);
a_dtEndDate = settleMonthStartDate.AddDays(-1.0);
return;
}
case DatePeriod.AccountNextMonth:
{
DateTime settleMonthStartDate = BizHandler.GetSettleMonthStartDate();
a_dtStartDate = settleMonthStartDate.AddMonths(1);
a_dtEndDate = settleMonthStartDate.AddDays(-1.0).AddMonths(2);
break;
}
default:
return;
}
}
//public static DateTime GetServerDate()
//{
// FetchData fetchData = new FetchData();
// fetchData.InitSQL("select getdate() as d", false);
// if (fetchData.Fetch())
// {
// DataTable dataTable = fetchData.Data.Tables[0];
// return Convert.ToDateTime(dataTable.Rows[0][0]).Date;
// }
// throw new Abort();
//}
//public static DateTime GetServerTime()
//{
// FetchData fetchData = new FetchData();
// fetchData.InitSQL("select getdate() as d", false);
// if (fetchData.Fetch())
// {
// DataTable dataTable = fetchData.Data.Tables[0];
// return Convert.ToDateTime(dataTable.Rows[0][0]);
// }
// throw new Abort();
//}
public static void GetWeekRange(DateTime a_dTime, out DateTime a_dStartDay, out DateTime a_dEndDay)
{
checked
{
try
{
int num = (int)a_dTime.DayOfWeek;
num = ((num == 0) ? 7 : num);
a_dStartDay = a_dTime.AddDays((double)(0 - (num - 1))).Date;
a_dEndDay = a_dTime.AddDays((double)(7 - num)).Date;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
public static DateTime AddWeek(this DateTime a_Date, int a_WeekCount, ref int a_intYear, ref int a_intWeek)
{
DateTime dateTime = a_Date.AddDays((double)(checked(a_WeekCount * 7)));
DateTimeUtils.GetWeekIndex(dateTime, ref a_intYear, ref a_intWeek);
return dateTime;
}
public static DateTime AddWeek(this DateTime a_Date, int a_WeekCount, ref DateTime a_dStart, ref DateTime a_dEnd)
{
DateTime dateTime = a_Date.AddDays((double)(checked(a_WeekCount * 7)));
DateTimeUtils.GetWeekRange(dateTime, ref a_dStart, ref a_dEnd);
return dateTime;
}
//public static bool GetYearAndWeekIndex(DateTime a_dtDatetime, ref int a_intYear, ref int a_intWeek)
//{
// FetchData fetchData = new FetchData();
// string a_strSQL = string.Concat(new string[]
// {
// "select datepart(yyyy,",
// a_dtDatetime.ToShortDateString().QuotedStr(),
// ") as sys_year, datepart(wk,",
// a_dtDatetime.ToShortDateString().QuotedStr(),
// ") as sys_week"
// });
// fetchData.InitSQL(a_strSQL, false);
// if (fetchData.Fetch())
// {
// a_intYear = (int)Convert.ToInt16(fetchData.Data.Tables[0].Rows[0]["sys_year"]);
// a_intWeek = (int)Convert.ToInt16(fetchData.Data.Tables[0].Rows[0]["sys_week"]);
// return true;
// }
// a_intYear = 0;
// a_intWeek = 0;
// return false;
//}
}
}
2.5 创建类DateTimeUtils.cs
using System;
namespace WBF.Utils
{
public class DateTimeUtils
{
public static string GetWeekDay(string strDate)
{
string weekDay;
try
{
DateTime a_dtDateTime = Convert.ToDateTime(strDate);
weekDay = DateTimeUtils.GetWeekDay(a_dtDateTime);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return weekDay;
}
public static string GetWeekDay(DateTime a_dtDateTime)
{
string weekDay;
try
{
int dayOfWeek = (int)a_dtDateTime.DayOfWeek;
weekDay = DateTimeUtils.GetWeekDay(dayOfWeek);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return weekDay;
}
public static int GetMaxWeekOfYear(int a_intYear)
{
int result;
try
{
DateTime minValue = DateTime.MinValue;
DateTime minValue2 = DateTime.MinValue;
DateTimeUtils.GetStartAndEndDate(a_intYear, ref minValue, ref minValue2);
result = checked(minValue2.Subtract(minValue).Days + 1) / 7;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
public static int GetMaxWeekOfYear(DateTime dTime)
{
int maxWeekOfYear;
try
{
maxWeekOfYear = DateTimeUtils.GetMaxWeekOfYear(dTime.Year);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return maxWeekOfYear;
}
public static void GetWeekIndex(DateTime dTime, ref int a_intYear, ref int a_intWeek)
{
checked
{
try
{
DateTime minValue = DateTime.MinValue;
DateTime minValue2 = DateTime.MinValue;
DateTimeUtils.GetStartAndEndDate(dTime.Year, ref minValue, ref minValue2);
if (dTime > minValue2)
{
a_intYear = dTime.Year + 1;
a_intWeek = 1;
}
else if (dTime < minValue)
{
a_intYear = dTime.Year - 1;
a_intWeek = DateTimeUtils.GetMaxWeekOfYear(a_intYear);
}
else
{
int num = (int)dTime.DayOfWeek;
num = ((num == 0) ? 7 : num);
DateTime dateTime = dTime.AddDays((double)(0 - (num - 1)));
a_intYear = dTime.Year;
a_intWeek = dateTime.Subtract(minValue).Days / 7 + 1;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
private static void GetStartAndEndDate(int a_intYear, ref DateTime a_dtStart, ref DateTime a_dtEnd)
{
DateTime dateTime = new DateTime(a_intYear, 1, 1);
DateTime dateTime2 = new DateTime(a_intYear, 12, 31);
int num = (int)dateTime.Date.DayOfWeek;
int num2 = (int)dateTime2.Date.DayOfWeek;
if (num == 0)
{
num = 7;
}
if (num2 == 0)
{
num2 = 7;
}
checked
{
if (num > 4)
{
a_dtStart = dateTime.AddDays((double)(7 - num + 1));
}
else
{
a_dtStart = dateTime.AddDays((double)(0 - (num - 1)));
}
if (num2 < 4)
{
a_dtEnd = dateTime2.AddDays((double)(0 - num2));
return;
}
a_dtEnd = dateTime2.AddDays((double)(7 - num2));
}
}
public static void GetWeekIndex(string a_strDate, ref int a_intYear, ref int a_intWeek)
{
try
{
DateTime dTime = Convert.ToDateTime(a_strDate);
DateTimeUtils.GetWeekIndex(dTime, ref a_intYear, ref a_intWeek);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public static string GetWeekRange(DateTime dTime, ref DateTime a_dStartDay, ref DateTime a_dEndDay)
{
checked
{
string result;
try
{
int num = (int)dTime.DayOfWeek;
num = ((num == 0) ? 7 : num);
a_dStartDay = dTime.AddDays((double)(0 - (num - 1))).Date;
a_dEndDay = dTime.AddDays((double)(7 - num)).Date;
result = DateTimeUtils.WeekRangeToString(a_dStartDay, a_dEndDay);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
}
public static string GetWeekRange(int a_intYear, int a_intWeekIndex, ref DateTime a_dtStartDay, ref DateTime a_dtEndDay)
{
string result;
try
{
if (a_intWeekIndex < 1)
{
throw new Exception("周数必须大于0!");
}
DateTime minValue = DateTime.MinValue;
DateTime minValue2 = DateTime.MinValue;
DateTimeUtils.GetStartAndEndDate(a_intYear, ref minValue, ref minValue2);
int maxWeekOfYear = DateTimeUtils.GetMaxWeekOfYear(a_intYear);
if (a_intWeekIndex > maxWeekOfYear)
{
throw new Exception(a_intYear.ToString() + "年没有第" + a_intWeekIndex.ToString() + "周");
}
a_dtStartDay = minValue.AddDays((double)(checked((a_intWeekIndex - 1) * 7))).Date;
a_dtEndDay = a_dtStartDay.AddDays(6.0).Date;
result = DateTimeUtils.WeekRangeToString(a_dtStartDay, a_dtEndDay);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
private static string WeekRangeToString(DateTime weekRangeStart, DateTime weekRangeEnd)
{
string str = weekRangeStart.ToString("yyyy/MM/dd");
string str2 = weekRangeEnd.ToString("yyyy/MM/dd");
return str + "~" + str2;
}
public static string GetWeekDay(int index)
{
string result = string.Empty;
switch (index)
{
case 0:
result = "星期日";
break;
case 1:
result = "星期一";
break;
case 2:
result = "星期二";
break;
case 3:
result = "星期三";
break;
case 4:
result = "星期四";
break;
case 5:
result = "星期五";
break;
case 6:
result = "星期六";
break;
}
return result;
}
}
}
三、调用方法
我这里写了一个测试用例,我们看一下效果。
static void Main(string[] args)
{
DateTime l_dtstart;
DateTime l_dtend;
DateTimeExtension.GetSearchDate(DatePeriod.Today, out l_dtstart, out l_dtend);
DateTimeExtension.GetSearchDate(DatePeriod.LastWeek, out l_dtstart, out l_dtend);
DateTimeExtension.GetSearchDate(DatePeriod.ThisWeek, out l_dtstart, out l_dtend);
DateTimeExtension.GetSearchDate(DatePeriod.Yesterday, out l_dtstart, out l_dtend);
}