using System;
using System.Data; namespace Erp.Ship.Tool
{
[Serializable]
public enum DateInterval
{
Second, Minute, Hour, Day, Week, Month, Quarter, Year
}
/// <summary>
/// 日期处理工具类
/// </summary>
[Serializable]
public class DateUtil
{
private DateUtil(){ }
private static readonly string ISO8601Short = "yyyy-MM-dd";
private static readonly string ISO8601Long = "yyyy-MM-dd HH:mm:ss";
/// <summary>
/// 从计划配置取得本周从星期几开始
/// </summary>
/// <returns></returns>
public static DayOfWeek GetFirstDayOfWeek()
{
DayOfWeek firstDayOfWeek = DayOfWeek.Monday; DataRow[] drs = PlanUtil.SYS_DT.Select("attribute_name = 'Week_Start_Day'");
if (drs != null && drs.Length > 0)
{
string ATTRIBUTE_VALUE = drs[0]["ATTRIBUTE_VALUE"].ToString();
switch (ATTRIBUTE_VALUE)
{
case "0":
firstDayOfWeek = DayOfWeek.Sunday;
break;
case "1":
firstDayOfWeek = DayOfWeek.Monday;
break;
case "2":
firstDayOfWeek = DayOfWeek.Tuesday;
break;
case "3":
firstDayOfWeek = DayOfWeek.Wednesday;
break;
case "4":
firstDayOfWeek = DayOfWeek.Thursday;
break;
case "5":
firstDayOfWeek = DayOfWeek.Friday;
break;
case "6":
firstDayOfWeek = DayOfWeek.Saturday;
break;
default:
break;
}
} return firstDayOfWeek;
}
/// <summary>
/// 根据日期取得当前周次
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static int GetWeekOfYear(DateTime dt)
{
System.Globalization.GregorianCalendar gc = new System.Globalization.GregorianCalendar();
DayOfWeek firstDayOfWeek = GetFirstDayOfWeek(); int weekOfYear = gc.GetWeekOfYear(dt, System.Globalization.CalendarWeekRule.FirstDay, firstDayOfWeek); return weekOfYear;
}
/// <summary>
/// 根据日期获取一个周期(7天)的开始日期
/// </summary>
/// <param name="cd"></param>
/// <returns></returns>
public static DateTime getStartDate(DateTime cd)
{ string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
switch (Day[Convert.ToInt16(DateTime.Now.DayOfWeek)])
{
case "星期日": return cd.AddDays(-9);
case "星期一": return cd.AddDays(-10);
case "星期二": return cd.AddDays(-11);
case "星期三": return cd.AddDays(-12);
case "星期四": return cd.AddDays(-13);
case "星期五": return cd.AddDays(-7);
case "星期六": return cd.AddDays(-8);
}
return cd;
}
/// <summary>
/// 根据日期获取一个周期(7天)的结束日期
/// </summary>
/// <param name="cd"></param>
/// <returns></returns>
public static DateTime getEndDate(DateTime cd)
{
int t = Convert.ToInt16(cd.DayOfWeek);
switch (t)
{
case 0: return cd.AddDays(-3);
case 1: return cd.AddDays(-4);
case 2: return cd.AddDays(-5);
case 3: return cd.AddDays(-6);
case 4: return cd.AddDays(-7);
case 5: return cd.AddDays(-1);
case 6: return cd.AddDays(-2); }
return cd;
}
/// <summary>
/// 判断 字符对象 是否是日期字符
/// </summary>
/// <param name="obj">字符对象</param>
/// <returns></returns>
public static bool isDate(object obj)
{
bool tag = false;
try
{
if (obj != null)
{
Convert.ToDateTime(obj.ToString());
tag = true;
}
}
catch (Exception)
{
}
return tag;
}
public static string toStr(object obj)
{
try
{
if (obj == null || obj == DBNull.Value)
{
return string.Empty;
}
else
{
return Convert.ToDateTime(obj.ToString()).ToString(DateUtil.ISO8601Short);
}
}
catch (Exception)
{
return string.Empty;
}
}
public static string toLongStr(object obj)
{
try
{
if (obj == null || obj == DBNull.Value)
{
return string.Empty;
}
else
{
return Convert.ToDateTime(obj.ToString()).ToString(DateUtil.ISO8601Long);
}
}
catch (Exception)
{
return string.Empty;
}
}
/// <summary>
/// 将日期对象转换成日期
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static DateTime toDate(object obj)
{
try
{
if (obj != null)
{
return Convert.ToDateTime(obj.ToString().Trim());
}
else
{
return DateTime.MinValue;
}
}
catch (Exception)
{
return DateTime.MinValue;
} }
/// <summary>
/// 实现类似数据库 DateDiff 功能
/// </summary>
/// <param name="Interval">间隔类型</param>
/// <param name="StartDate">开始日期</param>
/// <param name="EndDate">结束日期</param>
/// <returns></returns>
public static long DateDiff(DateInterval Interval, System.DateTime StartDate, System.DateTime EndDate)
{
long lngDateDiffValue = 0;
System.TimeSpan TS = new System.TimeSpan(EndDate.Ticks - StartDate.Ticks);
switch (Interval)
{
case DateInterval.Second:
lngDateDiffValue = (long)TS.TotalSeconds;
break;
case DateInterval.Minute:
lngDateDiffValue = (long)TS.TotalMinutes;
break;
case DateInterval.Hour:
lngDateDiffValue = (long)TS.TotalHours;
break;
case DateInterval.Day:
lngDateDiffValue = (long)TS.Days;
break;
case DateInterval.Week:
lngDateDiffValue = (long)(TS.Days / 7);
break;
case DateInterval.Month:
lngDateDiffValue = (long)(TS.Days / 30);
break;
case DateInterval.Quarter:
lngDateDiffValue = (long)((TS.Days / 30) / 3);
break;
case DateInterval.Year:
lngDateDiffValue = (long)(TS.Days / 365);
break;
}
return (lngDateDiffValue);
}
public static string toColorStr(object obj)
{
string temp = "";
try
{
if (obj != null)
{
DateTime dt = Convert.ToDateTime(obj.ToString());
if (dt.Year == 2011)
{
temp = "<span class='x-grid-back-red1'>" + dt.ToString(DateUtil.ISO8601Short) + "</span>";
}
if (dt.Year == 2012)
{
temp = "<span class='x-grid-back-red2'>" + dt.ToString(DateUtil.ISO8601Short) + "</span>";
}
if (dt.Year == 2013)
{
temp = "<span class='x-grid-back-red3'>" + dt.ToString(DateUtil.ISO8601Short) + "</span>";
}
if (dt.Year == 2014)
{
temp = "<span class='x-grid-back-red4'>" + dt.ToString(DateUtil.ISO8601Short) + "</span>";
} }
}
catch (Exception)
{
}
return temp;
}
/// <summary>
/// 获取该年中是第几周
/// </summary>
/// <param name="day">日期</param>
/// <returns></returns>
public static int WeekOfYear(System.DateTime day)
{
int weeknum;
System.DateTime fDt = DateTime.Parse(day.Year.ToString() + "-01-01");
int k = Convert.ToInt32(fDt.DayOfWeek);//得到该年的第一天是周几
if (k == 0)
{
k = 7;
}
int l = Convert.ToInt32(day.DayOfYear);//得到当天是该年的第几天
l = l - (7 - k + 1);
if (l <= 0)
{
weeknum = 1;
}
else
{
if (l % 7 == 0)
{
weeknum = l / 7 + 1;
}
else
{
weeknum = l / 7 + 2;//不能整除的时候要加上前面的一周和后面的一周
}
}
return weeknum;
} public static string GetFirstDayOfWeekVal()
{
string ATTRIBUTE_VALUE = "1"; DataRow[] drs = PlanUtil.SYS_DT.Select("attribute_name = 'Week_Start_Day'");
if (drs != null && drs.Length > 0)
{
ATTRIBUTE_VALUE = drs[0]["ATTRIBUTE_VALUE"].ToString();
} return ATTRIBUTE_VALUE;
} /// <summary>
/// 获取该年中是第几季度
/// </summary>
/// <param name="day">日期</param>
/// <returns></returns>
public static int QuarterOfYear(System.DateTime day)
{
if (day.Month < 4)
{
return 1;
}
else if (day.Month > 9)
{
return 4;
}
else if (day.Month > 3 && day.Month < 7)
{
return 2;
}
else
{
return 3;
}
}
/// <summary>
/// 计算日期间隔
/// </summary>
/// <param name="d1">要参与计算的其中一个日期字符串</param>
/// <param name="d2">要参与计算的另一个日期字符串</param>
/// <returns>一个表示日期间隔的TimeSpan类型</returns>
public static TimeSpan toResult(string d1, string d2)
{
try
{
DateTime date1 = DateTime.Parse(d1);
DateTime date2 = DateTime.Parse(d2);
return toResult(date1, date2);
}
catch
{
throw new Exception("字符串参数不正确!");
}
}
/// <summary>
/// 计算日期间隔
/// </summary>
/// <param name="d1">要参与计算的其中一个日期</param>
/// <param name="d2">要参与计算的另一个日期</param>
/// <returns>一个表示日期间隔的TimeSpan类型</returns>
public static TimeSpan toResult(DateTime d1, DateTime d2)
{
TimeSpan ts;
if (d1 > d2)
{
ts = d1 - d2;
}
else
{
ts = d2 - d1;
}
return ts;
} /// <summary>
/// 计算日期间隔
/// </summary>
/// <param name="d1">要参与计算的其中一个日期字符串</param>
/// <param name="d2">要参与计算的另一个日期字符串</param>
/// <param name="drf">决定返回值形式的枚举</param>
/// <returns>一个代表年月日的int数组,具体数组长度与枚举参数drf有关</returns>
public static int[] toResult(string d1, string d2, diffResultFormat drf)
{
try
{
DateTime date1 = DateTime.Parse(d1);
DateTime date2 = DateTime.Parse(d2);
return toResult(date1, date2, drf);
}
catch
{
throw new Exception("字符串参数不正确!");
}
}
/// <summary>
/// 计算日期间隔
/// </summary>
/// <param name="d1">要参与计算的其中一个日期</param>
/// <param name="d2">要参与计算的另一个日期</param>
/// <param name="drf">决定返回值形式的枚举</param>
/// <returns>一个代表年月日的int数组,具体数组长度与枚举参数drf有关</returns>
public static int[] toResult(DateTime d1, DateTime d2, diffResultFormat drf)
{
#region 数据初始化
DateTime max;
DateTime min;
int year;
int month;
int tempYear, tempMonth;
if (d1 > d2)
{
max = d1;
min = d2;
}
else
{
max = d2;
min = d1;
}
tempYear = max.Year;
tempMonth = max.Month;
if (max.Month < min.Month)
{
tempYear--;
tempMonth = tempMonth + 12;
}
year = tempYear - min.Year;
month = tempMonth - min.Month;
#endregion
#region 按条件计算
if (drf == diffResultFormat.dd)
{
TimeSpan ts = max - min;
return new int[] { ts.Days };
}
if (drf == diffResultFormat.mm)
{
return new int[] { month + year * 12 };
}
if (drf == diffResultFormat.yy)
{
return new int[] { year };
}
return new int[] { year, month };
#endregion
} /// <summary>
/// 获取指定年月的最后一天
/// </summary>
/// <param name="year">年份</param>
/// <param name="month">月份</param>
/// <returns></returns>
public static int GetLastDayofMonth(int year, int month)
{
int days = DateTime.DaysInMonth(year, month);
DateTime datetime = new DateTime(year, month, 1);
return datetime.AddDays(days - 1).Day;
} /// <summary>
/// 获取指定日期所在周的第一天,星期天为第一天
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public static DateTime GetDateTimeWeekFirstDaySun(DateTime dateTime)
{
DateTime firstWeekDay = DateTime.Now; try
{
//得到是星期几,然后从当前日期减去相应天数
int weeknow = Convert.ToInt32(dateTime.DayOfWeek); int daydiff = (-1) * weeknow; firstWeekDay = dateTime.AddDays(daydiff);
}
catch { } return firstWeekDay;
} /// <summary>
/// 获取指定日期所在周的第一天,星期一为第一天
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public static DateTime GetDateTimeWeekFirstDayMon(DateTime dateTime)
{
DateTime firstWeekDay = DateTime.Now; try
{
int weeknow = Convert.ToInt32(dateTime.DayOfWeek); //星期一为第一天,weeknow等于0时,要向前推6天。
weeknow = (weeknow == 0 ? (7 - 1) : (weeknow - 1)); int daydiff = (-1) * weeknow; firstWeekDay = dateTime.AddDays(daydiff);
}
catch { } return firstWeekDay;
} /// <summary>
/// 获取指定日期所在周的最后一天,星期六为最后一天
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public static DateTime GetDateTimeWeekLastDaySat(DateTime dateTime)
{
DateTime lastWeekDay = DateTime.Now; try
{
int weeknow = Convert.ToInt32(dateTime.DayOfWeek); int daydiff = (7 - weeknow) - 1; lastWeekDay = dateTime.AddDays(daydiff); }
catch { } return lastWeekDay;
} /// <summary>
/// 获取指定日期所在周的最后一天,星期天为最后一天
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns> public static DateTime GetDateTimeWeekLastDaySun(DateTime dateTime)
{
DateTime lastWeekDay = DateTime.Now; try
{
int weeknow = Convert.ToInt32(dateTime.DayOfWeek); weeknow = (weeknow == 0 ? 7 : weeknow); int daydiff = (7 - weeknow); lastWeekDay = dateTime.AddDays(daydiff);
}
catch { } return lastWeekDay;
} /// <summary>
/// 获取指定日期的月份第一天
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public static DateTime GetDateTimeMonthFirstDay(DateTime dateTime)
{
if (dateTime == null)
{
dateTime = DateTime.Now;
} return new DateTime(dateTime.Year, dateTime.Month, 1);
} /// <summary>
/// 获取指定月份最后一天
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public static DateTime GetDateTimeMonthLastDay(DateTime dateTime)
{
int day = DateTime.DaysInMonth(dateTime.Year, dateTime.Month); return new DateTime(dateTime.Year, dateTime.Month, day);
}
}
} /// <summary>
/// 关于返回值形式的枚举
/// </summary>
public enum diffResultFormat
{
/// <summary>
/// 年数和月数
/// </summary>
yymm,
/// <summary>
/// 年数
/// </summary>
yy,
/// <summary>
/// 月数
/// </summary>
mm,
/// <summary>
/// 天数
/// </summary>
dd,
}

C# 日期帮助类的更多相关文章

  1. Android随笔之——Android时间、日期相关类和方法

    今天要讲的是Android里关于时间.日期相关类和方法.在Android中,跟时间.日期有关的类主要有Time.Calendar.Date三个类.而与日期格式化输出有关的DateFormat和Simp ...

  2. Java 日期格式化工具类

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  3. 日期操作类--SimpleDateFormat类

    使用SimpleDateFormat格式化日期 SimpleDateFormat是一个以语言环境敏感的方式来格式化和分析日期的类.SimpleDateFormat允许你选择任何用户自定义日期时间格式来 ...

  4. 日期操作类--Date类

    Date-API ava.util包提供了Date类来封装当前的日期和时间.Date类提供两个构造函数来实例化Date对象.第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函 ...

  5. 日期转换类 DateConverter.java

    package com.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.D ...

  6. 日期工具类 - DateUtil.java

    日期工具类,提供对日期的格式化和转换方法.获取区间日期.指定日期.每月最后一天等. 源码如下:(点击下载 -DateUtil.java.commons-lang-2.6.jar ) import ja ...

  7. C++实现日期转换类DateTime

    概述 工作中我们在网络传输时使用time_t来传输时间,在显示时使用字符串来显示,下面是一个日期转换类的实现,方便以后使用: // DateTime.hpp #ifndef _DATETIME_H # ...

  8. JS 日期工具类-基于yDate

    源码下载 前言:最近在用到JS日期操作时,发现有一些不方便,于是搜素了一些网上的资料,基于一个开源工具类-yDate 进行了个性化定制,封装成了一个日期工具类工具函数大概介绍:1.普通的日期操作2. ...

  9. C#日期转换类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Te ...

  10. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

随机推荐

  1. 添加身份认证和鉴权方案-使用jwtbearer

    HTTP身份认证框架 RFC 7235 定义了一个 HTTP 身份验证框架,服务器可以用来质询(challenge)客户端的请求,客户端则可以提供身份验证凭据. 服务端开启了身份认证后.如果客户端访问 ...

  2. MySql类型转换函数cast

    这两天处理一个现网的MySQL慢查询工单,学到了一个好用的MySQL函数:cast.事情是这样的: 我们有两张表 t_user 和 t_rule 表,需要关联这两张表去查询,关联字段是 t_user ...

  3. ICESat-2 ATL03光子数据读取

    ICESat-2数据处理的方式一般为将光子数据投影到沿轨距离和高程的二维空间.如下图: ATL03数据读取 H5是一种数据存储结构,读取原理就是按照该结构获取数据,这里给出两种读取方式. ATL03的 ...

  4. Swoole 源码分析之 TCP Server 模块

    首发原文链接:https://mp.weixin.qq.com/s/KxgxseLEz84wxUPjzSUd3w 大家好,我是码农先森. 今天我们来分析 TCP Server 模块 的实现原理,下面这 ...

  5. 美团一面:什么是CAS?有什么优缺点?我说我只用过AtomicInteger。。。。

    引言 传统的并发控制手段,如使用synchronized关键字或者ReentrantLock等互斥锁机制,虽然能够有效防止资源的竞争冲突,但也可能带来额外的性能开销,如上下文切换.锁竞争导致的线程阻塞 ...

  6. Java爬虫-爬取疫苗批次信息

    今年3月份开始,就接到通知, 根据<关于开展有关人群第二剂次脊髓灰质炎灭活疫苗补种工作的通知>国疾控卫免发[2024]1号文件要求,在2016年3月1日至2019年9月30日之间出生的儿童 ...

  7. C语言——函数基本知识

    什么是函数 函数的定义 函数就是程序中独立的功能.(简单来说就是把代码打包成整体,起个名字,方便以后使用) 函数的使用 定义函数的格式 格式: 返回值类型 函数名(形参1,形参2,...) { 函数体 ...

  8. 还在拼冗长的WhereIf吗?100行代码解放这个操作

    通常我们在做一些数据过滤的操作的时候,经常需要做一些判断再进行是否要对其进行条件过滤. 普通做法 最原始的做法我们是先通过If()判断是否需要进行数据过滤,然后再对数据源使用Where来过滤数据. 示 ...

  9. P7959 [COCI2014-2015#6] WTF 题解

    P7959 [COCI2014-2015#6] WTF 题解 呃,是一道 DP 题 说实话,原题实际上是不要输出一种方法的--但是似乎放这道题的人想增加一点难度? 这里有两种做法,但都是 DP. 预备 ...

  10. ETL工具-nifi干货系列 第六讲 处理器JoltTransformJSON

    1.处理器作用 使用Jolt转换JSON数据为其他结构的JSON,成功的路由到'success',失败的'failure'.处理JSON的实用程序不是基于流的,因此大型JSON文档转换可能会消耗大量内 ...