Quartz.Net系列(十三):DateBuilder中的API详解
1.DateOf、ToDayAt、TomorrowAt
DateOf:指定年月日时分秒
public static DateTimeOffset DateOf(int hour, int minute, int second)
{
ValidateSecond(second);
ValidateMinute(minute);
ValidateHour(hour); DateTimeOffset c = SystemTime.Now();
DateTime dt = new DateTime(c.Year, c.Month, c.Day, hour, minute, second);
return new DateTimeOffset(dt, TimeZoneUtil.GetUtcOffset(dt, TimeZoneInfo.Local));
} public static DateTimeOffset DateOf(int hour, int minute, int second,
int dayOfMonth, int month)
{
ValidateSecond(second);
ValidateMinute(minute);
ValidateHour(hour);
ValidateDayOfMonth(dayOfMonth);
ValidateMonth(month); DateTimeOffset c = SystemTime.Now();
DateTime dt = new DateTime(c.Year, month, dayOfMonth, hour, minute, second);
return new DateTimeOffset(dt, TimeZoneUtil.GetUtcOffset(dt, TimeZoneInfo.Local));
} public static DateTimeOffset DateOf(int hour, int minute, int second,
int dayOfMonth, int month, int year)
{
ValidateSecond(second);
ValidateMinute(minute);
ValidateHour(hour);
ValidateDayOfMonth(dayOfMonth);
ValidateMonth(month);
ValidateYear(year); DateTime dt = new DateTime(year, month, dayOfMonth, hour, minute, second);
return new DateTimeOffset(dt, TimeZoneUtil.GetUtcOffset(dt, TimeZoneInfo.Local));
}
TodayAt:DateOf的一个封装
public static DateTimeOffset TodayAt(int hour, int minute, int second)
{
return DateOf(hour, minute, second);
}
TomorrowAt:AddDays的一次操作
public static DateTimeOffset TomorrowAt(int hour, int minute, int second)
{
ValidateSecond(second);
ValidateMinute(minute);
ValidateHour(hour); DateTimeOffset now = DateTimeOffset.Now;
DateTimeOffset c = new DateTimeOffset(
now.Year,
now.Month,
now.Day,
hour,
minute,
second,
,
now.Offset); // advance one day
c = c.AddDays(); return c;
}
2.EvenHourDate、EvenHourDateAfterNow、EvenHourDateBefore
小时四舍五入操作
EvenHourDate:AddHours(1)操作,分、秒抹零操作 比如8:12变成9:00
/// <summary>
/// Returns a date that is rounded to the next even hour above the given date.
/// </summary>
/// <remarks>
/// For example an input date with a time of 08:13:54 would result in a date
/// with the time of 09:00:00. If the date's time is in the 23rd hour, the
/// date's 'day' will be promoted, and the time will be set to 00:00:00.
/// </remarks>
/// <param name="date">the Date to round, if <see langword="null" /> the current time will
/// be used</param>
/// <returns>the new rounded date</returns>
public static DateTimeOffset EvenHourDate(DateTimeOffset? date)
{
if (!date.HasValue)
{
date = SystemTime.Now();
}
DateTimeOffset d = date.Value.AddHours();
return new DateTimeOffset(d.Year, d.Month, d.Day, d.Hour, , , d.Offset);
}
EvenHourDateAfterNow:当前时间加一小时,EvenHourDate(null)的封装
EvenHourDateBefore:分秒抹零操作
/// <summary>
/// Returns a date that is rounded to the previous even hour below the given date.
/// </summary>
/// <remarks>
/// For example an input date with a time of 08:13:54 would result in a date
/// with the time of 08:00:00.
/// </remarks>
/// <param name="date">the Date to round, if <see langword="null" /> the current time will
/// be used</param>
/// <returns>the new rounded date</returns>
public static DateTimeOffset EvenHourDateBefore(DateTimeOffset? date)
{
if (!date.HasValue)
{
date = SystemTime.Now();
}
return new DateTimeOffset(date.Value.Year, date.Value.Month, date.Value.Day, date.Value.Hour, , , date.Value.Offset);
}
3.EvenMinuteDate、EvenMinuteDateAfterNow、EvenMinuteDateBefore
分钟操作,和前面的小时操作方法差不多
EvenMinuteDate:AddMinutes(1)操作
EvenMinuteDateAfterNow:DateTimeOffset.Now.AddMinutes(1)操作
EvenMinuteDateBefore:分钟抹零操作
4.EvenSecondDate、EvenSecondDateAfterNow、EvenSecondDateBefore
分钟操作,和前面的小时和分钟操作方法差不多
EvenSecondDate:AddSeconds(1)操作
EvenSecondDateAfterNow:DateTimeOffset.Now.AddSeconds(1)操作
EvenSecondDateBefore:秒钟抹零操作
5.NextGivenMinuteDate、NextGivenSecondDate
返回一个日期,该日期四舍五入到给定分秒的下一个偶数倍。
NextGivenMinuteDate
public static DateTimeOffset NextGivenMinuteDate(DateTimeOffset? date, int minuteBase)
{
if (minuteBase < || minuteBase > )
{
throw new ArgumentException("minuteBase must be >=0 and <= 59");
} DateTimeOffset c = date ?? SystemTime.Now(); if (minuteBase == )
{
return new DateTimeOffset(c.Year, c.Month, c.Day, c.Hour, , , , c.Offset).AddHours();
} int minute = c.Minute; int arItr = minute/minuteBase; int nextMinuteOccurance = minuteBase*(arItr + ); if (nextMinuteOccurance < )
{
return new DateTimeOffset(c.Year, c.Month, c.Day, c.Hour, nextMinuteOccurance, , , c.Offset);
}
return new DateTimeOffset(c.Year, c.Month, c.Day, c.Hour, , , , c.Offset).AddHours();
}
NextGivenSecondDate
public static DateTimeOffset NextGivenSecondDate(DateTimeOffset? date, int secondBase)
{
if (secondBase < || secondBase > )
{
throw new ArgumentException("secondBase must be >=0 and <= 59");
} DateTimeOffset c = date ?? SystemTime.Now(); if (secondBase == )
{
return new DateTimeOffset(c.Year, c.Month, c.Day, c.Hour, c.Minute, , , c.Offset).AddMinutes();
} int second = c.Second; int arItr = second/secondBase; int nextSecondOccurance = secondBase*(arItr + ); if (nextSecondOccurance < )
{
return new DateTimeOffset(c.Year, c.Month, c.Day, c.Hour, c.Minute, nextSecondOccurance, , c.Offset);
}
return new DateTimeOffset(c.Year, c.Month, c.Day, c.Hour, c.Minute, , , c.Offset).AddMinutes();
}
6.FutureDate
指定年、月、周、日、时、分、秒加一操作
public static DateTimeOffset FutureDate(int interval, IntervalUnit unit)
{
return TranslatedAdd(SystemTime.Now(), unit, interval);
}
private static DateTimeOffset TranslatedAdd(DateTimeOffset date, IntervalUnit unit, int amountToAdd)
{
switch (unit)
{
case IntervalUnit.Day:
return date.AddDays(amountToAdd);
case IntervalUnit.Hour:
return date.AddHours(amountToAdd);
case IntervalUnit.Minute:
return date.AddMinutes(amountToAdd);
case IntervalUnit.Month:
return date.AddMonths(amountToAdd);
case IntervalUnit.Second:
return date.AddSeconds(amountToAdd);
case IntervalUnit.Millisecond:
return date.AddMilliseconds(amountToAdd);
case IntervalUnit.Week:
return date.AddDays(amountToAdd*);
case IntervalUnit.Year:
return date.AddYears(amountToAdd);
default:
throw new ArgumentException("Unknown IntervalUnit");
}
}
7.NewDate、NewDateInTimeZone、InMonth、InYear、InTimeZone、InMonthOnDay、AtMinute、AtSecond、AtHourMinuteAndSecond、OnDay
实例化DateBuilder指定年月日时分秒时区
public static DateBuilder NewDate()
{
return new DateBuilder();
} /// <summary>
/// Create a DateBuilder, with initial settings for the current date and time in the given timezone.
/// </summary>
/// <param name="tz">Time zone to use.</param>
/// <returns></returns>
public static DateBuilder NewDateInTimeZone(TimeZoneInfo tz)
{
return new DateBuilder(tz);
}
public class DateBuilder
{
private int month;
private int day;
private int year;
private int hour;
private int minute;
private int second;
private TimeZoneInfo tz; /// <summary>
/// Create a DateBuilder, with initial settings for the current date
/// and time in the system default timezone.
/// </summary>
private DateBuilder()
{
DateTime now = DateTime.Now; month = now.Month;
day = now.Day;
year = now.Year;
hour = now.Hour;
minute = now.Minute;
second = now.Second;
} /// <summary>
/// Create a DateBuilder, with initial settings for the current date and time in the given timezone.
/// </summary>
/// <param name="tz"></param>
private DateBuilder(TimeZoneInfo tz)
{
DateTime now = DateTime.Now; month = now.Month;
day = now.Day;
year = now.Year;
hour = now.Hour;
minute = now.Minute;
second = now.Second; this.tz = tz;
}
}
8.ValidateYear、ValidateMonth、ValidateDay、ValidateHour、ValidateMinute、ValidateSecond
验证年月日时分秒
public static void ValidateHour(int hour)
{
if (hour < || hour > )
{
throw new ArgumentException("Invalid hour (must be >= 0 and <= 23).");
}
} public static void ValidateMinute(int minute)
{
if (minute < || minute > )
{
throw new ArgumentException("Invalid minute (must be >= 0 and <= 59).");
}
} public static void ValidateSecond(int second)
{
if (second < || second > )
{
throw new ArgumentException("Invalid second (must be >= 0 and <= 59).");
}
} public static void ValidateDayOfMonth(int day)
{
if (day < || day > )
{
throw new ArgumentException("Invalid day of month.");
}
} public static void ValidateMonth(int month)
{
if (month < || month > )
{
throw new ArgumentException("Invalid month (must be >= 1 and <= 12).");
}
} public static void ValidateYear(int year)
{
if (year < || year > )
{
throw new ArgumentException("Invalid year (must be >= 1970 and <= 2099).");
}
}
9.Build
生成DateTimeOffset
public DateTimeOffset Build()
{
DateTime dt = new DateTime(year, month, day, hour, minute, second);
TimeSpan offset = TimeZoneUtil.GetUtcOffset(dt, tz ?? TimeZoneInfo.Local);
return new DateTimeOffset(dt, offset);
}
Quartz.Net系列(十三):DateBuilder中的API详解的更多相关文章
- VB中的API详解
		
一.API是什么? 这个我本来不想说的,不过也许你知道其它人不知道,这里为了照顾一下新手,不得不说些废话,请大家谅解. Win32 API即为Microsoft 32位平台的应用程序编程接口(Appl ...
 - netty系列之:netty中的Channel详解
		
目录 简介 Channel详解 异步IO和ChannelFuture Channel的层级结构 释放资源 事件处理 总结 简介 Channel是连接ByteBuf和Event的桥梁,netty中的Ch ...
 - netty系列之:netty中的ByteBuf详解
		
目录 简介 ByteBuf详解 创建一个Buff 随机访问Buff 序列读写 搜索 其他衍生buffer方法 和现有JDK类型的转换 总结 简介 netty中用于进行信息承载和交流的类叫做ByteBu ...
 - Quartz.Net系列(十四):详解Job中两大特性(DisallowConcurrentExecution、PersistJobDataAfterExecution)
		
1.DisallowConcurrentExceution 从字面意思来看也就是不允许并发执行 简单的演示一下 [DisallowConcurrentExecution] public class T ...
 - 转:VB中的API详解
		
在接下来的这篇文章中,我将向大家介绍.NET中的线程API,怎么样用C#创建线程,启动和停止线程,设置优先级和状态. 在.NET中编写的程序将被自动的分配一个线程.让我们来看看用C#编程语言创建线程并 ...
 - ElasticSearch 中 REST API 详解
		
本文主要内容: 1 ElasticSearch常用的操作 2 ElasticSearchbulk命令 ES REST API elasticsearch支持多种通讯,其中包括http请求响应服务,因此 ...
 - 【SignalR学习系列】6. SignalR Hubs Api 详解(C# Server 端)
		
如何注册 SignalR 中间件 为了让客户端能够连接到 Hub ,当程序启动的时候你需要调用 MapSignalR 方法. 下面代码显示了如何在 OWIN startup 类里面定义 SignalR ...
 - 【SignalR学习系列】8. SignalR Hubs Api 详解(.Net C# 客户端)
		
建立一个 SignalR 连接 var hubConnection = new HubConnection("http://www.contoso.com/"); IHubProx ...
 - 【SignalR学习系列】7. SignalR Hubs Api 详解(JavaScript 客户端)
		
SignalR 的 generated proxy 服务端 public class ContosoChatHub : Hub { public void NewContosoChatMessage( ...
 
随机推荐
- excel如何快速统计出某一分类的最大值?
			
问题:如何统计出某一分类的最大值? 解答:利用分类汇总或透视表快速搞定! 思路1:利用分类汇总功能 具体操作方法如下: 选中数据区任意一个单元格,然后点击“数据-分类汇总”按钮.(下图 1 处). 在 ...
 - CKA考试个人心得分享
			
考试相关准备: 真题:需要的私密: 网络:必须开启VPN,以便能访问国外网络,强烈建议在香港搭建相应FQ: 证件:考试需要出示含有拉丁文(英文)带照片的有效证件,相关有效证件参考(优先建议护照):ht ...
 - f(t) = t的傅里叶系数
			
计算机网络课程讲到物理层,布置作业的第一题是求f(t)=t (0≤t≤1)的傅里叶系数. 我们知道任何一个周期函数都可以被傅里叶级数逼近.如果是实值函数,则可以用正弦分量,余弦分量,直流分量来近似.公 ...
 - Android学习笔记Log类输出日志信息
			
Log类提供的方法 代码示例 .. Log.e(TAG,"[错误信息]"); Log.w(TAG,"[警告信息]"); Log.i(TAG,"[普通信 ...
 - ca72a_c++_标准IO库:面向对象的标准库
			
/*ca72a_c++_标准IO库:面向对象的标准库继承:基类->派生类3个头文件9个标准库类型IO对象不可复制或赋值 ofstream, f--file,文件输出流ostringstream, ...
 - Blazor带我重玩前端(一)
			
写在前面 曾经我和前端朋友聊天的时候,我说我希望有一天可以用C#写前端,不过当时更多的是美好的想象,而现在这一切正变得真实…… 什么是Blazor 我们知道浏览器可以正确解释并执行JavaScript ...
 - SpringBoot -- 项目结构+启动流程
			
一.简述: 项目结构 二.简述:启动流程 说springboot的启动流程,当然少不了springboot启动入口类 @SpringBootApplication public class Sprin ...
 - JavaWeb网上图书商城完整项目--day02-28.查询所有分类功能之left页面使用Q6MenuBar组件显示手风琴式下拉菜单
			
首先页面去加载的时候,会去加载main.js文件,我们在加载left.jsp.top.jsp body.jsp,现在我们修改main.jsp的代码,让它去请求的时候去访问的是不在直接去访问left.j ...
 - 主机Redis服务迁移到现有Docker Overlay环境
			
记录最后一次对中型2C企业级项目的容器化改造 hello, 好久不见,之前文章记录了一个实战的2C分布式项目的改造过程,结果如下: 其中Redis并未完成容器化改造(目前是主机单点),本文记录将Red ...
 - urllib库使用方法
			
这周打算把学过的内容重新总结一下,便于以后翻阅查找资料. urllib库是python的内置库,不需要单独下载.其主要分为四个模块: 1.urllib.request——请求模块 2.urllib.e ...