51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> app >> 文章正文

只用普通数学公式日期运算

更新时间:2012-1-8:  来源:51代码网

题:需要一个计算日期的函数,不可用正则表达式,用普通的数学方法实现。


公司财年每年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天以后
        }    }}

[1] [2] 下一页

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 赞助商链接
    推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |