-2

我遇到了一个烦人的问题。我有两个日期时间变量。雇佣日期和终止日期。我需要得到工作天数。终止日期 - 就业日期。我该怎么做呢?

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;

我试过了,但没用

4

4 回答 4

5

好吧,您正在尝试处理DateTime值-因此您不应该int.Parse从一开始就使用它。使用DateTime.ParseExact. 获得两个DateTime值后,您可以使用减法得到 a 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;
于 2013-03-11T15:19:41.257 回答
3

减去 DateTime 对象会产生TimeSpan。因此,用于TimeSpan.TotalDays获取两个日期之间的总天数:

int dWorked = (terminDate - empDate).TotalDays;

更新:对于 LINQ to Enitites 使用EntityFunctions.DiffDays方法,该方法计算两个可空日期之间的天数:

from x in context.Foo
select EntityFunctions.DiffDays(x.FromDate, x.ToDate)
于 2013-03-11T15:19:18.253 回答
0

您可以轻松地减去两个 Datetime,从而获得 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"
于 2013-03-11T15:26:12.697 回答
0

尝试一些类似的东西

var numDays = (terminDate - empDate ).TotalDays;
dworked = (int)Math.Round(numDays, MidpointRounding.AwayFromZero);
于 2013-03-11T15:19:16.153 回答