2013-03-11 47 views
-2

我一直在討厭的問題。我有兩個日期時間變量。僱用日期和終止日期。我需要得到工作天數。期限指示日期 - 就業日期。 我該如何着手解決這個問題?DateTime的計算

DateTime empDate = int.Parse((employeeEmploy.ElementAt(i).dateofEmpl).GetValueOrDefault().ToString("yyyyMMdd")); 

DateTime terminDate = int.Parse((employeeEmploy.ElementAt(i).terminDate).GetValueOrDefault().ToString("yyyyMMdd")); 

int? dWorked = terminDate - empDate; 

我試過,但沒有工作

+1

什麼是'strDate'? – 2013-03-11 15:19:40

+2

「不起作用」是什麼意思?你有沒有看到一個彈出窗口說「這不行!」? – 2013-03-11 15:20:32

+0

如果這個傢伙沒有周末和假期工作,你可能需要檢查工作日,而不是在合同開始和結束之間的天數差異。 – nvoigt 2013-03-11 15:27:12

回答

0

嘗試沿着

var numDays = (terminDate - empDate).TotalDays; 
dworked = (int)Math.Round(numDays, MidpointRounding.AwayFromZero); 
3

減去datetime對象的線條產生TimeSpan東西。因此,使用TimeSpan.TotalDays拿到總天數兩個日期之間數:

int dWorked = (terminDate - empDate).TotalDays; 

UPDATE:對於LINQ到Enitites使用EntityFunctions.DiffDays方法,其中兩個爲null的日期之間的計算天數:

from x in context.Foo 
select EntityFunctions.DiffDays(x.FromDate, x.ToDate) 
+0

你將如何處理這是數據類型值.. DateTime是... DateTime? – Dineshp 2013-03-11 15:26:48

+0

我正在使用linq實體,他們可以有空值。所以我將它們聲明爲DateTime? empDate和DateTime? terminDate。當我使用上面的代碼時,我得到一個關於空值的錯誤。 – Dineshp 2013-03-11 15:30:22

+0

@Dineshp看到我的更新 – 2013-03-11 15:32:48

5

嗯,你'試圖處理DateTime值 - 所以你不應該使用int.Parse開始。使用DateTime.ParseExact。一旦你有兩個DateTime值,你可以用減法獲得TimeSpan,然後計算總天數從:

DateTime employmentDate = ...; 
DateTime terminationDate = ...; 

TimeSpan employmentDuration = terminationDate - employmentDate; 
int days = (int) employmentDuration.TotalDays; 

個人而言,我會實際使用我的Noda Time項目做這一切,心中你:

private static LocalDatePattern TextPattern = 
    LocalDatePattern.CreateWithInvariantInfo("yyyyMMdd"); 

... 
LocalDate employmentDate = TextPattern.Parse(...).Value; 
LocalDate terminationDate = TextPattern.Parse(...).Value; 
int days = Period.Between(employmentDate, terminationDate, PeriodUnits.Days) 
       .Days; 
+0

即時使用LINQ實體和我的數據類型可以爲空。所以我有類似DateTime的東西? 。有了這個,Timespan會給出一個錯誤。任何工作? – Dineshp 2013-03-11 15:23:45

0

你可以很容易地減去兩個日期時間讓你TimeSpan!

 DateTime employmentDate = new DateTime(2013,03,8); 
     DateTime terminationDate = new DateTime(2013,03,11); 

     TimeSpan days = terminationDate - employmentDate; 
     Console.WriteLine("Days: " + days.TotalDays); //Result: "Days: 3"