日期时间扩展


  日期时间扩展的类名为 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