2012-04-18 38 views
2

我想要做的事情如下最容易找到.net中的兩個時間戳之間的完整日曆年,月,日和時間

給定兩個日期,例如1998年3月02日和9月25日,2011年如何獲得間隔1998年3月02日(30天)分成

  1. 至1998年3月31日,
  2. 1998年4月01日至1998年12月31日(9月)
  3. 1999年1月1日至2010年12月31日(11歲)
  4. 2011年1月1日至August31,2011(8個月)
  5. 2011年9月1日至2011年9月25日(30天)

    Howeve如果任何間隔不存在,我們不會強迫包括它,即結果不總是如日/月/年/月/日,例如

    鑑於開始日期= '1998-02-01' 和結束日期= '2011-03-31', 的預期結果是(月/年/月)

    1998-02-01 == > 1998-12-31 1999-01-01 ==> 2010-12-31 2011-01-01 ==> 2011-03-31

    給定開始日期='1998-02-01'和結束日期= '1998年3月31日', 的預期結果是(2個月)

    1998-02-01 ==> 2011-03-31

    給定開始日期='1998-01-05'和結束日期='1998-02-03', 預期結果爲(天/天)
    1998-01-05 ==> 2011-01-31 1998-02-01 ==> 2011-02-03

看一看的情況下,我的描述沒有意義如下。我試圖完成相同的,但在.NET

Algorithm to find optimal day/month/year intervals to in an arbitrary timeframe?

+0

我不知道的是什麼在這裏問?要重申和澄清,您正在設法將任意的開始和結束日期分成給定範圍的幾個範圍,但所有3個值(開始日期,結束日期和時間範圍)都是已知的?接下來的問題是你有什麼嘗試? – psubsee2003 2012-04-18 07:59:26

+0

該算法的輸入是兩個時間戳; i)startTime ii)endTime 而輸出是完整壓光日/月/年的範圍。 – WPFAbsoluteNewBie 2012-04-18 08:14:08

+0

好吧,我想我現在看到了,現在我喝了咖啡,你打算在幾天內從開始日期到月底結束,然後在幾個月內分裂到年底,然後開始結束年份的年份,然後回到結束日期,結果反過來呢? – psubsee2003 2012-04-18 08:34:55

回答

1

你可以做這樣的:

DateTime startDate = new DateTime(1998, 3, 2); 
DateTime endDate = new DateTime(2011, 9, 25); 

DateTime firstMonth = new DateTime(startDate.Year, startDate.Month, 1).AddMonths(1); 
DateTime firstYear = new DateTime(startDate.Year + 1, 1, 1); 
DateTime lastYear = new DateTime(endDate.Year, 1, 1); 
DateTime lastMonth = new DateTime(endDate.Year, endDate.Month, 1); 

Console.WriteLine("{0:yyyy-MM-dd} - {1:yyyy-MM-dd}", startDate, firstMonth.AddDays(-1)); 
Console.WriteLine("{0:yyyy-MM-dd} - {1:yyyy-MM-dd}", firstMonth, firstYear.AddDays(-1)); 
Console.WriteLine("{0:yyyy-MM-dd} - {1:yyyy-MM-dd}", firstYear, lastYear.AddDays(-1)); 
Console.WriteLine("{0:yyyy-MM-dd} - {1:yyyy-MM-dd}", lastYear, lastMonth.AddDays(-1)); 
Console.WriteLine("{0:yyyy-MM-dd} - {1:yyyy-MM-dd}", lastMonth, endDate); 

輸出:

1998-03-02 - 1998-03-31 
1998-04-01 - 1998-12-31 
1999-01-01 - 2010-12-31 
2011-01-01 - 2011-08-31 
2011-09-01 - 2011-09-25 
+0

我想我需要改變問題陳述。結果並不總是天/月/年/月/天 – WPFAbsoluteNewBie 2012-04-18 08:21:46

+0

@WPFAbsoluteNewBie:然後,您只需比較間隔的開始和結束時間,以及開始和結束日期。如果您得到一個起始位置在結束位置之後的間隔,或者起始位置在開始日期之前,或者結束位於結束日期之後,則不應將其包含在結果中。如果您留下的是空集合,只需設置開始日期和結束日期的時間間隔即可。 – Guffa 2012-04-18 08:27:45

+0

<對不起格式化/> 給定開始日期='1998-02-01'和結束日期='1998-09-25'建議的解決方案將給我(假設非閏年) 1998-02- 01 - 1998-02-28 ## 1998-03-01 - 1998-08-31 ## 1998-09-01 - 1998-09-25 ## 它應該在哪裏 1998-02-01 - 1998-08-31 ## 1998-09-01 - 1998-09-25 ## – WPFAbsoluteNewBie 2012-04-18 08:39:42

相關問題