日期时间扩展
日期时间扩展的类名为 DateTimeExtension
,大多是基于 System.DateTime
类型的扩展。
1、日的起始/终止时刻
StartOfDay 方法获取一天中的起始时刻;EndOfDay 方法获一天中的终止时刻。
[TestMethod]
public void TestDate()
{
var date = DateTime.Parse("2009-7-8 8:45:30");
Console.WriteLine(date.StartOfDay());
Console.WriteLine(date.EndOfDay());
}
输出结果为:
07/08/2009 00:00:00
07/08/2009 23:59:59
比如,在进行数据查询时,如果使用时间期间进行查询,一般查询参数未给定时分秒,因些为了保证查询跨度在合理的时间范围之内时,需要使用这两个方法把条件补充完整:
var startTime = context.Request.Params["startDate"].To<DateTime?>();
var endTime = context.Request.Params["endDate"].To<DateTime?>();
if (startTime != null)
{
parameters.Add("StartDate", startTime.Value.StartOfDay());
}
if (endTime != null)
{
parameters.Add("EndDate", endTime.Value.EndOfDay());
}
2、月的起始/终止日
StartOfMonth 方法获取本月中的第一天;EndOfMonth 方法获取本月中的最后一天。
[TestMethod]
public void TestDate()
{
var date = DateTime.Parse("2009-7-8");
Console.WriteLine(date.StartOfMonth());
Console.WriteLine(date.EndOfMonth());
}
输出结果为:
07/01/2009 00:00:00
07/31/2009 00:00:00
3、周的起始/终止日
StartOfWeek 方法获取本周的星期一;EndOfWeek 方法获取本周的星期天。
[TestMethod]
public void TestDate()
{
var date = DateTime.Parse("2009-7-8");
Console.WriteLine(date.StartOfWeek());
Console.WriteLine(date.EndOfWeek());
}
输出结果为:
07/07/2009 00:00:00
07/12/2009 00:00:00
4、判断闰年
IsLeapYear 判断指定的日期是否为闰年。
5、设置年/月/日
SetYear 方法将日期中的年份替换成指定的数字;SetMonth 方法将日期中的月份替换成指定的数字;SetDay 方法将日期中的天替换成指定的数字。
[TestMethod]
public void TestDate()
{
var date = DateTime.Parse("2009-7-8");
Console.WriteLine(date.SetYear(2010));
Console.WriteLine(date.SetMonth(12));
Console.WriteLine(date.SetDay(22));
}
输出结果为:
07/08/2010 00:00:00
12/08/2009 00:00:00
07/22/2009 00:00:00
6、判断周末
IsWeekend 方法判断指定的日期是否为星期六、星期天。
7、获取第一个/最后一个周几
FirsetWeek 方法获取当前月中第一个周几;LastWeek 方法获取当前月中的最后一个周几。
[TestMethod]
public void TestDate()
{
var date = DateTime.Parse("2009-7-8");
Console.WriteLine("第一个周一:{0}", date.FirstWeek(DayOfWeek.Monday));
Console.WriteLine("第一个周六:{0}", date.FirstWeek(DayOfWeek.Wednesday));
Console.WriteLine("最后一个周一:{0}", date.LastWeek(DayOfWeek.Monday));
Console.WriteLine("最后一个周六:{0}", date.LastWeek(DayOfWeek.Saturday));
}
输出结果为:
第一个周一:07/06/2009 00:00:00
第一个周六:07/01/2009 00:00:00
最后一个周一:07/27/2009 00:00:00
最后一个周六:07/25/2009 00:00:00
8、下一(n)个周几/上一(n)个周几
NextWeek 方法获取当前日期之后的第一(n)个周几。PreviousWeek 方法获取当前日期之前的第一(n)个周几。
[TestMethod]
public void TestDate()
{
var date = DateTime.Parse("2009-7-8");
Console.WriteLine("下一个周一:{0}", date.NextWeek(DayOfWeek.Monday));
Console.WriteLine("下下个周一:{0}", date.NextWeek(DayOfWeek.Monday, 2));
Console.WriteLine("上一个周一:{0}", date.PreviousWeek(DayOfWeek.Monday));
Console.WriteLine("上上个周一:{0}", date.PreviousWeek(DayOfWeek.Monday, 2));
}
输出结果为:
下一个周一:07/13/2009 00:00:00
下下个周一:07/20/2009 00:00:00
上一个周一:07/06/2009 00:00:00
上上个周一:06/29/2009 00:00:00
9、时间戳/时间转换
ToTimeStamp 方法将时间转换为长整型的时间戳;ToDateTime 将长整型的时间戳转为时间。
[TestMethod]
public void TestDate()
{
var date = new DateTime(2009, 12, 22, 13, 22, 34);
Console.WriteLine(date.ToTimeStamp());
Console.WriteLine(1261459354L.ToDateTime());
}
输出结果为:
1261459354
12/22/2009 13:22:34
10、解析 TimeSpan
ToTimeSpan 方法是 System.String
的扩展方法,由于它返回的是 System.TimeSpan
因此也将其归于此节下。
ToTimeSpan 方法支持的字符格式如下:
- s: 秒
- m: 分钟
- h: 小时
- d: 天
举例如下:
0:20:33 表示 23分33秒、12d 表示 12天、10h 表示 10小时、10m 表示 10分钟、10s 表示 10秒,其余整数表示毫秒。
[TestMethod]
public void TestTimeSpan()
{
Console.WriteLine("1000".ToTimeSpan());
Console.WriteLine("12h".ToTimeSpan());
Console.WriteLine("24m".ToTimeSpan());
Console.WriteLine("10d".ToTimeSpan());
Console.WriteLine("".ToTimeSpan(TimeSpan.FromSeconds(10)));
}
输出结果为:
00:00:01
12:00:00
00:24:00
10.00:00:00
00:00:10