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 ...
随机推荐
- 第十届山东省大学生程序设计竞赛题解(A、F、M、C)
部分代码define了long long,请记得开long long A. Calandar 把年份.月份.单个的天数全都乘以对应的系数转化成单个的天数即可,注意最后的结果有可能是负数,要转化成正数. ...
- postgresql 去重&查最新一组记录 关键词partition by
- angualr2+ 性能优化-trackBy
1.使用trackBy提高性能 为什么使用trackBy进行性能优化,在平时的开发中,我们对数组的处理基本都是通过接口获取新的数组进行替换或push,但是在这个过程中,Angular不知道你是要做什么 ...
- vulnhub靶场 --> JANGOW: 1.0.1
靶机下载地址 JANGOW: 1.0.1 << 点我下载 开始打靶 IP发现 nmap扫描网段发现靶机ip:192.168.111.140 端口发现 对靶机进行常规端口扫描 访问网站 访问 ...
- OpenStack Centos7 T版本搭建
目录 Centos7搭建OpenStack T版本 --上 1. 环境准备(所有节点操作) 1.1 修改主机名 1.2 关闭selinux 以及防火墙 1.3 修改hosts 1.4 配置时间同步 c ...
- 一个与 WSL2 建立远程的简单方法
前言 众所周知,windows 会通过虚拟交换机给本机和 wsl2(Linux 子系统)分别分配 ip.于是本机重启或重启 wsl 服务的时候会重新分配 ip.之前所作的端口转发,监听之类的都会失效. ...
- MySQL学习笔记-SQL实践1
SQL实践1 借着学校的数据库实验,来对之前学习的SQL语言进行实践和总结. 实验环境: macOS 13.2 (22D49) mysql Ver 8.0.32 for macos13.0 on ar ...
- C# .NET 6 使用WorkFlow Core 创建工作审批流
1,背景 工作流思想在上世纪60年代就有人提出过:70年代就有人开始尝试,但是由于当时许多的限制,工作流一直没有成功的被实现:80年代才出现第一批成功的工作流系统:90年代工作流技术走向了第一个发展高 ...
- Spark-submit常用任务命令参数和说明
Spark常用任务命令参数和说明 spark-submit \ --name task2018072711591669 \ --master yarn --deploy-mode client \ - ...
- String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的
a.可变性:String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的.StringBuilder与StringBuffer ...