gpt4 book ai didi

iphone - 查找给定时间段内工作日的性能问题

转载 作者:行者123 更新时间:2023-12-03 17:26:48 26 4
gpt4 key购买 nike

我有一些方法可以返回两个给定日期之间的工作日数。由于当两个日期相差数年时调用这些方法变得非常昂贵,因此我想知道如何以更有效的方式重构这些方法。返回的结果是正确的,但我觉得 iPhone 处理器正在努力跟上,因此当我在 10 年之内调用这些方法时,应用程序会卡住。有什么建议吗?

    //daysList contains all weekdays that need to be found between the two dates
-(NSInteger) numberOfWeekdaysFromDaysList:(NSMutableArray*) daysList
startingFromDate:(NSDate*)startDate
toDate:(NSDate*)endDate
{
NSInteger retNumdays = 0;

for (Day *dayObject in [daysList objectEnumerator])
{
if ([dayObject isChecked])
{
retNumdays += [self numberOfWeekday:[dayObject weekdayNr] startingFromDate:startDate toDate:endDate];
}
}

return retNumdays;
}


-(NSInteger) numberOfWeekday:(NSInteger)day
startingFromDate:(NSDate*)startDate
toDate:(NSDate*)endDate
{
NSInteger numWeekdays = 0;
NSDate *nextDate = startDate;

NSComparisonResult result = [endDate compare:nextDate];

//Do while nextDate is in the past
while (result == NSOrderedDescending || result == NSOrderedSame)
{
if ([NSDate weekdayFromDate:nextDate] == day)
{
numWeekdays++;
}

nextDate = [nextDate dateByAddingDays:1];
result = [endDate compare:nextDate];
}

return numWeekdays;
}

最佳答案

您需要创建一个公式来计算工作日数,而不是循环遍历每一天并计算它们。

类似这样的东西(这是一个粗略的近似值),其中 startJD 和 endJD 是 Julian Dates :

nWeekdays = (endJD - startJD) * 5 / 7;  

当然,这很接近,但并不准确,因为它没有考虑一周中的哪一天开始和结束。但这是一般想法,您需要一个公式,而不是循环。

您还可以在this topic by searching上找到很多内容。 .

关于iphone - 查找给定时间段内工作日的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2830922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com