2010-05-11 273 views
1

我有2個整數字段表示YYYYMMDD格式的日期。減去這些字段中的2個以獲得它們之間的正確天數的最佳方法是什麼?如何用YYYYMMDD格式減去日期?

例如,如果我採取20100511和20100428之間的差異,我希望結果是13而不是83.我知道我需要將整數字段轉換爲日期格式,但是我嘗試過的所有內容都會引發異常或無法正常工作。

我錯過了什麼?在vb.net答案請

+0

Eww ...爲什麼它們是有效表示字符串的整數字段? – Noldorin 2010-05-11 20:23:11

+0

@Noldorin:這是比字符串更有效的類型嗎? – 2010-05-11 20:28:06

+0

Well DateTime是最合適的,我知道每個數據庫系統都支持。如果你打算使用一個整數,可能最好存儲滴答計數... – Noldorin 2010-05-12 13:52:35

回答

8

應該是這樣的(未經測試!)

Dim date1 As DateTime = DateTime.ParseExact(yourdate1.ToString(), "yyyyMMdd", CultureInfo.InvariantCulture) 
Dim date2 As DateTime = DateTime.ParseExact(yourdate2.ToString(), "yyyyMMdd", CultureInfo.InvariantCulture) 
Dim days As Integer = date1.Subtract(date2).Days 
+0

我認爲你需要'yourdate.ToString()'爲提問者的情況,但在其他方面是正確的。 :) – Noldorin 2010-05-11 20:24:33

+0

好點。我編輯過說你的日期必須是一個字符串,但這不是海報的內容。 – 2010-05-11 20:27:07

+0

您的格式字符串錯誤。 'mm'是分鐘,'YYYY'不存在。 – 2010-05-11 20:27:55

2
Dim dt1 As Integer = 20100510 
    Dim dt2 As Integer = 20100520 
    Dim date1 As DateTime = DateTime.ParseExact(dt1.ToString(), "yyyyMMdd", CultureInfo.InvariantCulture) 
    Dim date2 As DateTime = DateTime.ParseExact(dt2.ToString(), "yyyyMMdd", CultureInfo.InvariantCulture) 
    Dim nDays As Integer = date1.Subtract(date2).Days 
+0

這並沒有提到所需的解析。 – Noldorin 2010-05-11 20:24:11

+0

固定。但請注意,在你讓某人失望並告訴另一個人你的答案是「否則是正確的」之前,你可能真的想要自己去確認它。他沒有ParseExact所需的CultureInfo參數(他已經修復了它),所以你也錯了。 – dcp 2010-05-11 20:32:31

+0

是的,這就是爲什麼我說未經測試。 :)你對自定義字符串格式做了同樣的錯誤(YYYYmmdd應該是yyyyMMdd)。我們都錯了。 – 2010-05-11 20:35:55

4

矯枉過正代碼...

// C# 

var ds1 = 20100511; 
var ds2 = 20100428; 

Func<int, DateTime> getDate = s => DateTime.ParseExact(s.ToString(), 
                 "yyyyMMdd", 
                 null); 

var d1 = getDate(ds1); 
var d2 = getDate(ds2); 

var diff = d1.Subtract(d2); 
var result = diff.Days; //13 

...

//VB.Net 

Dim ds1 = 20100511 
Dim ds2 = 20100428 

Dim getDate = Function(s) DateTime.ParseExact(s.ToString(), "yyyyMMdd", Nothing) 

Dim d1 = getDate(ds1) 
Dim d2 = getDate(ds2) 

Dim diff = d1.Subtract(d2) 
Dim result = diff.Days '13 
+0

得到VB.Net用'Dim'替換'var'並刪除分號 – 2010-05-11 20:31:19

+1

+1不重複ParseExact() – 2010-05-11 20:33:47

+0

大聲笑...我只是改變它,所以它是VB ...猜我應該改回它。 – 2010-05-11 20:35:08

0
DateTime x = DateTime.ParseExact("19920715", "yyyyMMdd",CultureInfo.InvariantCulture); 
      DateTime y = DateTime.ParseExact("20141025", "yyyyMMdd", CultureInfo.InvariantCulture); 
      int days = (y.Subtract(x).Days); 
      float years = days/365;