using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
namespace UserDefinedDataEXP
{
class Date
{
DateTime dt;
//1.1 构造器
public Date()
{
dt = new DateTime();
}
//1.2 构造器
public Date(int Year, int Month, int Day)
{
dt = new DateTime(Year,Month,Day);
}
//1.3 构造器
public Date(DateTime date)
{
dt = new DateTime(date.Year,date.Month,date.Day);
}
//1.4 构造器
public Date(int ExcelSerialNum)
{
dt = new DateTime(1900,1,1).AddDays(ExcelSerialNum-2);
}
//1.5 构造器
public Date(Date dt2)
{
dt = new DateTime(dt2.dt.Year,dt2.dt.Month,dt2.dt.Day);
}
//2. 属性DateValue
public string DateValue
{
get { return dt.ToString("D", DateTimeFormatInfo.InvariantInfo); }
}
//3.1 YF_AA
public double YF_AA(Date endDate)
{
TimeSpan ActSpan = endDate.dt - dt;
int ActDaysinYear;
ActDaysinYear= (DateTime.IsLeapYear(dt.Year)?366:365);
return (double) ActSpan.Days / ActDaysinYear;
}
//3.2 YF_AA
public double YF_MM(Date endDate)
{
TimeSpan ActSpan = endDate.dt - dt;
return ActSpan.Days / 360.0;
}
//3.3 YF_30_360
public double YF_30_360(Date endDate)
{
int years = endDate.dt.Year - dt.Year;
int months = endDate.dt.Month - dt.Month;
int days = endDate.dt.Day - dt.Day;
return years +(30*months+days) / 360.0;
}
//3.4 YF_365 = Act/365
public double YF_365(Date endDate)
{
TimeSpan ActSpan = endDate.dt - dt;
return ActSpan.TotalDays / 365.0;
}
//3.5 YF_365_25 = Act/365.25
public double YF_365_25 (Date endDate)
{
TimeSpan ActSpan = endDate.dt - dt;
return ActSpan.TotalDays / 365.25;
}
//4.1 D_MM
public int D_MM(Date endDate)
{
TimeSpan ActSpan = endDate.dt - dt;
return ActSpan.Days;
}
//4.2 D_30_360
public int D_30_360(Date endDate)
{
int years = endDate.dt.Year - dt.Year;
int months = endDate.dt.Month - dt.Month;
int days = endDate.dt.Day - dt.Day;
return years + (30 * months + days) ;
}
//5.1 add_workdays()
public Date add_workdays(int workdays)
{
DateTime dt1 = dt;
for (int i = 0; i < workdays; i++)
{
switch (dt1.DayOfWeek)
{
case DayOfWeek.Saturday:
dt1=dt1.AddDays(2);
break;
case DayOfWeek.Friday:
dt1 = dt1.AddDays(3);
break;
default:
dt1 = dt1.AddDays(1);
break;
}
}
return new Date(dt1);
}
//6. D_EFF
public double D_EFF(Date Date2)
{
return Date2.SerialValue - this.SerialValue;
}
//7. 属性SerialValue
public int SerialValue
{
get { return dt.Subtract(new DateTime(1900,1,1)).Days;}
}
//8. 函数add_period_string
public Date add_period_string(string addPeriod, int n)
{
DateTime dt1 = dt;
switch (addPeriod.Substring(1,1))
{
case "d":
dt1 = dt1.AddDays(double.Parse(addPeriod.Substring(0, 1)));
break;
case "m":
dt1 = dt1.AddMonths(int.Parse(addPeriod.Substring(0,1)));
dt1 = dt1.AddDays(n);
break;
case "y":
dt1 = dt1.AddYears(int.Parse(addPeriod.Substring(0,1)));
break;
}
return new Date(dt1);
}
}
}
static void Main(string[] args)
{
Date startDate = new Date(2012, 2, 15);
Date endDate = new Date(2012, 8, 15);
Console.WriteLine("StartDate:{0:D},\tEndDate:{1:D}", startDate.DateValue, endDate.DateValue);
Console.WriteLine("Number of days according Act/360: " + startDate.D_MM(endDate));
Console.WriteLine("Number of days according 30/360: " + startDate.D_30_360(endDate));
Console.WriteLine();
Date date1 = new Date(2009, 6, 11);
// Adding working date, actual days in a period
Console.WriteLine("Date1 is : {0:D}", date1.DateValue);
Console.WriteLine("Date1 + 1 working days : {0:D}, actual days between: {1}", date1.add_workdays(1).DateValue, date1.D_EFF(date1.add_workdays(1)));
Console.WriteLine("Date1 + 2 working days : {0:D}, actual days between: {1}", date1.add_workdays(2).DateValue, date1.D_EFF(date1.add_workdays(2)));
Console.WriteLine("Date1 + 3 working days : {0:D}, actual days between: {1}", date1.add_workdays(3).DateValue, date1.D_EFF(date1.add_workdays(3)));
// Adding periods
Console.WriteLine("Date1 + 2 days : {0:D}", date1.add_period_string("2d", 0).DateValue);
Console.WriteLine("Date1 + 4 months : {0:D}", date1.add_period_string("4m", 0).DateValue);
Console.WriteLine("Date1 + 4 months mod foll: {0:D}", date1.add_period_string("4m", 1).DateValue);
Console.WriteLine("Date1 + 7 years : {0:D}", date1.add_period_string("7y", 0).DateValue);
Console.ReadLine();
}
【C#】 8. Date类型
最新推荐文章于 2024-08-25 21:25:29 发布