让我们说,我有两个日期订单日期 - 2014年1月1日和交货日期 - 2014年6月2日。现在,如果我想计算它所花费的工作周数(订单日期 - 交货日期),我该如何在c#中进行。
答案 0 :(得分:1)
如果您想要日期范围内的工作天数,可以使用:
var from = DateTime.Today.AddDays(-10);
var to = DateTime.Today;
var daysOfWeek = new DayOfWeek[] { DayOfWeek.Monday, DayOfWeek.Tuesday
, DayOfWeek.Wednesday, DayOfWeek.Friday
, DayOfWeek.Thursday };
var days = Enumerable.Range(0, 1 + to.Subtract(from).Days)
.Select((n, i) => from.AddDays(i).DayOfWeek)
.Where(n => daysOfWeek.Contains(n.DayOfWeek));
如果您想要一个日期范围内的周数,请使用:
(int)((to - from).TotalDays/7)
答案 1 :(得分:0)
我假设“每周工作多少”是指“工作日多少”。这不是那么简单,因为它取决于文化,你需要考虑假期。
如果您依赖周一至周五作为工作日,您可以使用类似于c# DateTime to Add/Subtract Working Days中讨论的解决方案,计算从Order Date
到Delivery Date
的每一天的条件持。
Q& A仍然让您了解如何确定某个地区的假期(请注意 - 在瑞士,该国的每个地区都有不同的假期!)。
更新:根据Nagaraj建议的链接,我收集到您可能也会将“周”称为块(即“许多工作周的工作周”)。如果是这样,反过来,您需要定义一周中需要多少天来考虑这一周......
答案 2 :(得分:0)
(int)((DeliveryDate-OrderDate).TotalDays/7)
答案 3 :(得分:0)
我正在使用字符串并将其转换为日期,因为我不确定您的日期和格式。相应地调整您的代码。
string orderDate = @"1/1/2014";
string deliveryDate = @"6/2/2014";
// This will give you a total number of days that passed between the two dates.
double daysPassed = Convert.ToDateTime(deliveryDate).
Subtract(Convert.ToDateTime(orderDate)).TotalDays;
// Use this if you want actual weeks. This will give you a double approximate. Change to it to an integer round it off (truncate it).
double weeksPassed = daysPassed / 7;
// Use this if you want to get an approximate number of work days in those weeks (based on 5 days a week schedule).
double workDaysPassed = weeksPassed * 5;
答案 4 :(得分:-1)
我猜你对工作日而不是几周感兴趣。您可以使用GetWeekOfYear:
修改强>
要回复评论,这里有一些代码示例:
int start = System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(new DateTime(2014, 1, 14), System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
int end = System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(new DateTime(2014, 2, 3), System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
int weeks = end - start;
那应该给你几周的时间。