반응형
public static class DateTimeExtentions
{
public static bool Between(this DateTime dt, DateTime rangeBeg, DateTime rangeEnd)
{
return dt.Ticks >= rangeBeg.Ticks && dt.Ticks <= rangeEnd.Ticks;
}
public static int CalculateAge(this DateTime dateTime)
{
var age = DateTime.Now.Year - dateTime.Year;
if (DateTime.Now < dateTime.AddYears(age))
age--;
return age;
}
public static int Age(this DateTime dateOfBirth)
{
if (DateTime.Today.Month < dateOfBirth.Month ||
DateTime.Today.Month == dateOfBirth.Month &&
DateTime.Today.Day < dateOfBirth.Day)
{
return DateTime.Today.Year - dateOfBirth.Year - 1;
}
else
return DateTime.Today.Year - dateOfBirth.Year;
}
public static string ToReadableTime(this DateTime value)
{
var ts = new TimeSpan(DateTime.UtcNow.Ticks - value.Ticks);
double delta = ts.TotalSeconds;
if (delta < 60)
{
return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";
}
if (delta < 120)
{
return "a minute ago";
}
if (delta < 2700) // 45 * 60
{
return ts.Minutes + " minutes ago";
}
if (delta < 5400) // 90 * 60
{
return "an hour ago";
}
if (delta < 86400) // 24 * 60 * 60
{
return ts.Hours + " hours ago";
}
if (delta < 172800) // 48 * 60 * 60
{
return "yesterday";
}
if (delta < 2592000) // 30 * 24 * 60 * 60
{
return ts.Days + " days ago";
}
if (delta < 31104000) // 12 * 30 * 24 * 60 * 60
{
int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
return months <= 1 ? "one month ago" : months + " months ago";
}
var years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
return years <= 1 ? "one year ago" : years + " years ago";
}
public static bool WorkingDay(this DateTime date)
{
return date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday;
}
public static bool IsWeekend(this DateTime date)
{
return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday;
}
public static DateTime NextWorkday(this DateTime date)
{
var nextDay = date;
while (!nextDay.WorkingDay())
{
nextDay = nextDay.AddDays(1);
}
return nextDay;
}
public static DateTime Next(this DateTime current, DayOfWeek dayOfWeek)
{
int offsetDays = dayOfWeek - current.DayOfWeek;
if (offsetDays <= 0)
{
offsetDays += 7;
}
DateTime result = current.AddDays(offsetDays);
return result;
}
public static long GetTicksFromNow(this DateTime dtStart)
{
DateTime currentDate = DateTime.Now;
long elapsedTicks = currentDate.Ticks - dtStart.Ticks;
return elapsedTicks;
}
}
반응형
'[====== Development ======] > C#' 카테고리의 다른 글
C# Winform Datagridview 의 Datasource에 SortableBindingList 적용 (0) | 2021.02.08 |
---|---|
Email 전송 기능 (0) | 2021.02.05 |
파일 검색 (0) | 2021.02.05 |
dll 파일의 32bit용 / 64bit 인지 여부 확인하는 함수 (0) | 2021.02.05 |
WPF(XAML) - Animation (0) | 2021.01.21 |