题:需要一个计算日期的函数,不可用正则表达式,用普通的数学方法实现。
公司财年每年3月份(P1)开始,到转年3月份结束(P12);
每个P月都从周五开始,周四结束;
3个月一个季度,每个季度的第一个月是5周,后二个月各4周;
见下描述(注意,没有输入表,要在程序里计算):
2011季度4...
P11 2011-01-07周五 2011-02-03周四 (4周后)
P12 2011-02-04周五 2011-03-03周四 (4周后)
2012季度1
P1 2011-03-04周五 2011-04-07周四 (5周后)
P2 2011-04-08周五 2011-05-05周四 (4周后)
P3 2011-05-06周五 2011-06-02周四 (4周后)
2012季度2
P4 2011-06-03周五 2011-07-07周四 (5周后)
P5 2011-07-08周五 2011-08-04周四 (4周后)
P6 2011-08-05周五 2011-09-01周四 (4周后)
...
现在需要一个console app,提示输入日期,比如:2011-03-08
结果返回:
P值 (p1-p12),开始日期,结束日期。比如:P1, 2011-03-04,2011-04-07
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var input = "2011-03-08";
var result = (from 我的P p in P表
let tst = DateTime.Parse(input)
where tst >= p.开始日期 && tst < p.结束日期
select p).FirstOrDefault();
if (result == null)
Console.WriteLine("没有对应的P表项目。");
else
Console.WriteLine("{0}, {1:D},{2:D}", result.代号, result.开始日期, result.结束日期.AddDays(-1));
Console.ReadKey();
}
private static List<我的P> P表 = new List<我的P>{
new 我的P{ 代号="P11", 开始日期 = DateTime.Parse (" 2011-01-07"), 结束日期= DateTime.Parse("2011-02-04")},
new 我的P { 代号="P12", 开始日期= DateTime.Parse ( "2011-02-04"), 结束日期=DateTime.Parse( "2011-03-04")},
new 我的P{ 代号="P1", 开始日期= DateTime.Parse( "2011-03-04"), 结束日期= DateTime.Parse ("2011-04-08")}
};
public class 我的P
{
public string 代号;
public DateTime 开始日期;
public DateTime 结束日期; //注意应该是生活中日期 + 1天以后
} }}