C# 日期帮助类
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# 日期帮助类的更多相关文章
- Android随笔之——Android时间、日期相关类和方法
今天要讲的是Android里关于时间.日期相关类和方法.在Android中,跟时间.日期有关的类主要有Time.Calendar.Date三个类.而与日期格式化输出有关的DateFormat和Simp ...
- Java 日期格式化工具类
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- 日期操作类--SimpleDateFormat类
使用SimpleDateFormat格式化日期 SimpleDateFormat是一个以语言环境敏感的方式来格式化和分析日期的类.SimpleDateFormat允许你选择任何用户自定义日期时间格式来 ...
- 日期操作类--Date类
Date-API ava.util包提供了Date类来封装当前的日期和时间.Date类提供两个构造函数来实例化Date对象.第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函 ...
- 日期转换类 DateConverter.java
package com.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.D ...
- 日期工具类 - DateUtil.java
日期工具类,提供对日期的格式化和转换方法.获取区间日期.指定日期.每月最后一天等. 源码如下:(点击下载 -DateUtil.java.commons-lang-2.6.jar ) import ja ...
- C++实现日期转换类DateTime
概述 工作中我们在网络传输时使用time_t来传输时间,在显示时使用字符串来显示,下面是一个日期转换类的实现,方便以后使用: // DateTime.hpp #ifndef _DATETIME_H # ...
- JS 日期工具类-基于yDate
源码下载 前言:最近在用到JS日期操作时,发现有一些不方便,于是搜素了一些网上的资料,基于一个开源工具类-yDate 进行了个性化定制,封装成了一个日期工具类工具函数大概介绍:1.普通的日期操作2. ...
- C#日期转换类
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Te ...
- Java日期工具类,Java时间工具类,Java时间格式化
Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...
随机推荐
- 关于sql server导出csv格式文件的身份证号乱码问题处理办法
1.使用SQL Server数据库经常会遇到导出大量数据的情况,例如导出40万条数据,虽然EXCL支持可以放入百万的数据,但是使用数据库复制,粘贴到EXCL表格时,数据库会提示溢出的情况,如下图所示: ...
- ASP.NET Core如何禁用模型验证(或者从模型状态中移除某些属性)?
这是一篇4年前的文章:[经验分享]在ASP.NET Core中,如果禁用某个请求的模型验证? 事隔多年,又有网友问到这个问题.我就来重新整理一下,顺便扩展一下之前的解决办法. ===== 这是一个来自 ...
- 怀念中的java
学了这门语言后一直没能做成项目,倒是安装环境,用记事本编辑的话,除了js最好做的就是java了. 以前学java的时候是一帮很有朝气的同学,在一个培训班,每天苦哈哈.从c开始学的语言,学完基础部分转入 ...
- wpf 无法从流中加载光标
使用wpf 加载图片光标时,无论是用光标文件的绝对路径还是使用uri资源的方式都不得行,及报无法从文件中加载光标或无法从流中加载光标.这中情况,就很有可能是光标cur文件不是标准的光标文件.比如你是通 ...
- 【C#】初次使用webapi的体会
webapi controller 要继承 ApiController 重写权限验证 ,记得使用 System.Web.Http下的AuthorizeAttribute. webapi默认路由 ...
- sourceTree .gitignore文件处理
最近犯了个低级错误,在sourceTree中通过右键,直接将 工程文件加入到 ignore列表中.提交之后,别人拉下来代码一直显示报错 在意识到上面这个错误之后,一直想恢复却恢复不了,尝试从Sorce ...
- js 求任意两数之间的和
知识点:函数的传参,函数的返回值 函数的传参 函数的参数包括以下两种类型: 1.形参:在定义函数时,声明的参数变量仅在函数内部可见: 2.实参:在调用函数时,实际传入的值. 示例 我们在定义函数的时候 ...
- 代码审计——基础(JAVAEE)
JAVAEE 目录 JAVAEE 常见框架 Struct2(控制层) Hibernate(持久层(与数据库交互)(不用再写简单的sql语句,但是需要一些列复杂的配置文件))(全ORM模型) Sprin ...
- ARC169
A 我们定义 \(dp_{dep}\) 为第 \(dep\) 层会对上一层产生多少的影响. 如果有一层的影响大于 \(0\),在足够次计算后那么肯定是正号.如果小于零那就一定是负号. 由于越久影响到的 ...
- MySQL 存储函数及调用
1.mysql 存储函数及调用 在MySQL中,存储函数(Stored Function)是一种在数据库中定义的特殊类型的函数,它可以从一个或多个参数返回一个值.存储函数在数据库层面上封装了复杂的SQ ...