我一直在讨厌这个问题。我有两个日期时间变量。就业日期和终止日期。我需要获得工作天数。期限日期 - 就业日期。 我该怎么做呢?
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;
我试过了,但那不起作用
答案 0 :(得分: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;
答案 1 :(得分: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)
答案 2 :(得分:0)
按照
的方式尝试var numDays = (terminDate - empDate ).TotalDays;
dworked = (int)Math.Round(numDays, MidpointRounding.AwayFromZero);
答案 3 :(得分:0)
您可以轻松地减去两个Datetimes来获取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"