And here is the code:
using System;
namespace Luegisdorf.Extenders
{
/// <summary>
/// Provides extended functionality for <c>DateTime</c> type.
/// All calculation are based on ticks as
smallest date time part unit.
/// All time units represents portions of the
western, Gregorian calendar.
/// </summary>
public static class DateTimeExtender
{
/// <summary>
/// Calculates the begin of day for
a given date time
/// </summary>
/// <param name="dateTime">
/// The date time base for
calculation
/// </param>
/// <returns>
/// The calculated begin of day
/// </returns>
public static DateTime BeginOfDay(this DateTime dateTime)
{
return dateTime.Date;
}
/// <summary>
/// Calculates the begin of week for
a given date time.
/// The first day of week is sunday.
/// </summary>
/// <param name="dateTime">
/// The date time base for
calculation
/// </param>
/// <returns>
/// The calculated begin of week
/// </returns>
public static DateTime BeginOfWeek(this DateTime dateTime)
{
return dateTime.AddDays(-(int)dateTime.DayOfWeek).BeginOfDay();
}
/// <summary>
/// Calculates the begin of month
for a given date time
/// </summary>
/// <param name="dateTime">
/// The date time base for
calculation
/// </param>
/// <returns>
/// The calculated begin of month
/// </returns>
public static DateTime BeginOfMonth(this DateTime dateTime)
{
return new DateTime(dateTime.Year, dateTime.Month,
1, 0, 0, 0,
dateTime.Kind);
}
/// <summary>
/// Calculates the begin of year for
a given date time
/// </summary>
/// <param name="dateTime">
/// The date time base for
calculation
/// </param>
/// <returns>
/// The calculated begin of year
/// </returns>
public static DateTime BeginOfYear(this DateTime dateTime)
{
return new DateTime(dateTime.Year, 1, 1, 0, 0, 0,
dateTime.Kind);
}
/// <summary>
/// Calculates the end of year for a
given date time
/// </summary>
/// <param name="dateTime">
/// The date time base for
calculation
/// </param>
/// <returns>
/// The calculated end of month
/// </returns>
public static DateTime EndOfYear(this DateTime dateTime)
{
return new DateTime(dateTime.Year + 1, 1, 1, 0, 0,
0,
dateTime.Kind).AddTicks(-1);
}
/// <summary>
/// Calculates the end of month for
a given date time
/// </summary>
/// <param name="dateTime">
/// The date time base for
calculation
/// </param>
/// <returns>
/// The calculated begin of year
/// </returns>
public static DateTime EndOfMonth(this DateTime dateTime)
{
return new DateTime(dateTime.Year, dateTime.Month,
DateTime.DaysInMonth(dateTime.Year, dateTime.Month), 0, 0, 0,
dateTime.Kind).AddDays(1).AddTicks(-1);
}
/// <summary>
/// Calculates the end of week for a
given date time.
/// The last day of week is
saturday.
/// </summary>
/// <param name="dateTime">
/// The date time base for
calculation
/// </param>
/// <returns>
/// The calculated end of week
/// </returns>
public static DateTime EndOfWeek(this DateTime dateTime)
{
return dateTime.AddDays(Enum.GetValues(typeof(DayOfWeek)).Length
- (int)dateTime.DayOfWeek - 1).EndOfDay();
}
/// <summary>
/// Calculates the end of day for a
given date time
/// </summary>
/// <param name="dateTime">
/// The date time base for
calculation
/// </param>
/// <returns>
/// The calculated end of day
/// </returns>
public static DateTime EndOfDay(this DateTime dateTime)
{
return
dateTime.Date.AddDays(1).AddTicks(-1);
}
}
}
And you can use it like this:
using System;
using Luegisdorf.Extenders;
namespace Luegisdorf.Example
{
class SampleClass
{
public void DoSomething()
{
var anyDate = new DateTime(2018, 10, 28, 17, 23, 15);
Console.WriteLine(anyDate.BeginOfDay()
.ToString("yyyy-MM-dd HH:mm:ss")); // writes '2018-10-28 00:00:00'
Console.WriteLine(anyDate.EndOfDay()
.ToString("yyyy-MM-dd HH:mm:ss")); // writes '2018-10-28 23:59:59'
Console.WriteLine(anyDate.BeginOfWeek()
.ToString("ddd, yyyy-MM-dd
HH:mm:ss")); // writes 'Sun, 2018-10-28
00:00:00'
Console.WriteLine(anyDate.EndOfWeek()
.ToString("ddd, yyyy-MM-dd
HH:mm:ss")); // writes 'Sat, 2018-11-03
23:59:59'
Console.WriteLine(anyDate.BeginOfMonth()
.ToString("yyyy-MM-dd HH:mm:ss")); // writes '2018-10-01 00:00:00'
Console.WriteLine(anyDate.EndOfMonth()
.ToString("yyyy-MM-dd HH:mm:ss")); // writes '2018-10-31 23:59:59'
Console.WriteLine(anyDate.BeginOfYear()
.ToString("yyyy-MM-dd HH:mm:ss")); // writes '2018-01-01 00:00:00'
Console.WriteLine(anyDate.EndOfYear()
.ToString("yyyy-MM-dd HH:mm:ss")); // writes '2018-12-31 23:59:59'
}
}
}
May the snippet help you as well, to minimize your code base.
I'm pretty sure I will post some more extensions for the DateTime data type, so stay tuned...
No comments:
Post a Comment