- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究获取两个特定日期之间所有日期(周一、周二、周三)的最佳和最快方法。
日期以逗号分隔的字符串形式作为参数传递给网络服务,例如 mon,tue,wed,
目前这是伪代码。
所以我的(伪)代码如下
function Add(startdate, enddate, days)
{
dateList as New List(Of Date)
if days.split(',').count < 7 then
{
// This is the problem area.
}
while(startdate < enddate)
{
// do some processing of either the dates in dateList or just all days
}
}
这个问题对我来说是不是
1)
days
参数拆分成一个数组,day
:
startdate
和 enddate
之间的每个日期date.day
是 day
,添加到 dateList在这种方法中,可能有 (365 * 6) 个检查(假设开始日期和结束日期相隔一年),如果选择了所有日期,我可以忽略将它们放入列表2)
startdate
和 enddate
之间的每个日期3)
startdate
和 enddate
之间的每个 everyday
days
.contains(everyday.dayofweek.tostring()) 然后 addDatetoList4) 有没有我忽略的另一种方法,所有这些方法都完全无效?
计算需要在 vb.net 代码隐藏中进行,否则我会考虑使用 sql server 来完成。
编辑
作为函数计时的练习,我快速构建了以下内容来尝试我的方法和其他方法。
Dim DaysOfWeek As String = "Monday,Tuesday,Friday"
Dim startDate As DateTime = DateTime.Now
Dim endDate As DateTime = DateTime.Now.AddDays(365)
Dim dateList As New List(Of DateTime)()
Dim method1StopWatch As New Stopwatch
Dim method2StopWatch As New Stopwatch
Dim method3StopWatch As New Stopwatch
Dim method4StopWatch As New Stopwatch
Dim executionStart As Long
Dim executionEnd As Long
Dim noDays As Integer = 0
'Method3
method3StopWatch.Start()
Do While (startDate < endDate)
If DaysOfWeek.Contains(startDate.DayOfWeek.ToString()) Then
dateList.Add(startDate)
noDays = noDays + 1
End If
startDate = startDate.AddDays(1)
Loop
method3StopWatch.Stop()
Label3.Text = method3StopWatch.ElapsedTicks.ToString() & " " & noDays & " Days"
noDays = 0
dateList.Clear()
startDate = DateTime.Now
'Method2
method2StopWatch.Start()
Do While (startDate < endDate)
Select startDate.DayOfWeek.ToString()
Case "Monday"
If DaysOfWeek.Contains("Monday") Then
dateList.Add(startDate)
noDays = noDays + 1
End If
Case "Tuesday"
If DaysOfWeek.Contains("Monday") Then
dateList.Add(startDate)
noDays = noDays + 1
End If
Case "Wednesday"
If DaysOfWeek.Contains("Wednesday") Then
dateList.Add(startDate)
noDays = noDays + 1
End If
Case "Thursday"
If DaysOfWeek.Contains("Thursday") Then
dateList.Add(startDate)
noDays = noDays + 1
End If
Case "Friday"
If DaysOfWeek.Contains("Friday") Then
dateList.Add(startDate)
noDays = noDays + 1
End If
Case "Saturday"
If DaysOfWeek.Contains("Saturday") Then
dateList.Add(startDate)
noDays = noDays + 1
End If
Case "Sunday"
If DaysOfWeek.Contains("Sunday") Then
dateList.Add(startDate)
noDays = noDays + 1
End If
End Select
startDate = startDate.AddDays(1)
Loop
method2StopWatch.Stop()
Label2.Text = (method2StopWatch.ElapsedTicks).ToString() & " " & noDays & " Days"
noDays = 0
dateList.Clear()
startDate = DateTime.Now
method1StopWatch.Start()
For Each Day As String In DaysOfWeek.Split(CChar(","))
Do While (startDate < endDate)
If startDate.DayOfWeek.ToString() = Day Then
noDays = noDays + 1
dateList.Add(startDate)
End If
startDate = startDate.AddDays(1)
Loop
startDate = DateTime.Now
Next
method1StopWatch.Stop()
Label1.Text = (method1StopWatch.ElapsedTicks).ToString() & " " & noDays & " Days"
noDays = 0
dateList.Clear()
startDate = DateTime.Now
method4StopWatch.Start()
Dim daysList As New List(Of DayOfWeek)()
daysList.Add(DayOfWeek.Monday)
daysList.Add(DayOfWeek.Tuesday)
daysList.Add(DayOfWeek.Friday)
Dim datesList As List(Of Date) = GetDayOfWeekDates(startDate, endDate, daysList)
method4StopWatch.Stop()
Label4.Text = (method4StopWatch.ElapsedTicks).ToString() & " " & datesList.Count & " Days"
End Sub
Public Function GetDayOfWeekDates(startDate As Date, endDate As Date, daysOfWeek As List(Of DayOfWeek)) As List(Of Date)
Dim liReturn As New List(Of Date)()
Dim currDay As Date = startDate
While currDay <= endDate
If daysOfWeek.Contains(currDay.Date.DayOfWeek) Then
liReturn.Add(currDay.Date)
End If
currDay = currDay.AddDays(1)
End While
Return liReturn
End Function
导致周一、周二、周五的以下输出(经过的滴答声):
Method 1 : 10650 - 157 Days
Method 2 : 4152 - 157 Days
Method 3 : 4084 - 157 Days
Method 4 : 179 - 157 Days
这也意味着我的方法和逻辑很差。
最佳答案
这就是我的做法。我不知道这是否是最高效的方式,但在我看来,这是最容易阅读和理解的代码,即使您检查的日期范围很大,也应该执行得相当快。
Public Function GetDayOfWeekDates(startDate As Date, endDate As Date, daysOfWeek As List(Of DayOfWeek)) As List(Of Date)
Dim liReturn As New List(Of Date)()
Dim currDay As Date = startDate
While currDay <= endDate
If daysOfWeek.Contains(currDay.Date.DayOfWeek) Then
liReturn.Add(currDay.Date)
End If
currDay = currDay.AddDays(1)
End While
Return liReturn
End Function
您可以通过构建要检查的 DayOfWeek 列表来调用该函数:
Dim daysList As New List(Of DayOfWeek)()
daysList.Add(DayOfWeek.Monday)
daysList.Add(DayOfWeek.Friday)
Dim datesList As List(Of Date) = GetDayOfWeekDates(New Date(2012, 1, 1), New Date(2012, 12, 31), daysList)
在此示例中,您的结果将在 List(Of Date) datesList 中。
编辑:我刚刚注意到您提到网络服务将收到一个以逗号分隔的星期几列表。在我看来,您绝对应该在代码中的某个级别的单独函数中解析列表,如果列表无效,则可以通过 Web 服务返回错误。如上所示,查找日期列表的函数应采用强类型参数。
关于arrays - 获取两个日期之间的所有特定日期 - 最快的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14217088/
什么是更快的安卓? Color.rgb(184, 134, 011); 或 Color.parseColor("#234181"); 还是别的什么? 答案:最快的似乎是: int mycolor =
没错, 基本上我需要计算出从服务器到最终用户的最短路线。我有 2 台服务器 - 一台在英国,一台在美国。 我需要根据最终用户的位置确定从哪个服务器加载内容。 我最初想使用 fsock/curl/fgc
我正在阅读固定宽度整数类型 ( cpp reference) 并遇到int_fast8_t、int_fast16_t、int_fast32_t 和 int_least8_t 类型,int_least1
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 6年前关闭。
我有大量目录,我想尽快读取所有文件。我的意思是,不是 DirectoryInfo.GetFiles 快,而是“get-clusters-from-disk-low-level”快。 当然,.NET 2
我尝试寻找最小的可被1到n整除的数字,现在我正在寻求有关进一步压缩/使我的解决方案更有效的方法的建议。如果也有O(1)解决方案,那将非常酷。 def get_smallest_number(n):
有很多不同的方法可以在驱动程序之间选择元素。我想知道哪一个最快且最适合 native 应用程序(iOS 和 Android)。 Appium Driver 类有: findElementByAcces
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
让矩阵 A 说 A = magic(100);。我见过两种计算矩阵 A 的所有元素之和的方法。 sumOfA = sum(sum(A)); 或者 sumOfA = sum(A(:)); 其中一个比另一
我想为玩具车在没有障碍物的平面 (2d) 上规划一条路线。玩具车应该从点 (p1x,p1y) 移动到 (p2x,p2y)(又名狄利克雷边界条件)。此外,玩具车在起点的速度是(v1x,v1y),终点处要
假设有 n 个 3 维对象(多面体)。最快的方法是计算所有对象的交集O(n^2)? 现在,我正在使用一个基本上强制 T(n) 等于 n ^ 2 的库: for each object: // ther
关闭。这个问题需要 details or clarity 。它目前不接受答案。 想改进这个问题吗? 添加细节并通过 editing this post 澄清问题。 关闭 5 年前。 Improve
在 c: 上,我有数以万计的 *.foobar 文件。它们在各种各样的地方(即子目录)。这些文件的大小大约为 1 - 64 kb,并且是纯文本。 我有一个 class Foobar(string fi
我的基本问题是有多个线程做一些事情,其中一些需要比其他线程更多的时间(20 倍甚至更多),他们需要的时间只取决于起始值,但不能从起始值预测单独他们需要多少时间。为了减少更快线程的空闲时间,我想通过
好的,我有一个疑问: select distinct(a) from mytable where b in (0,3) 什么会更快,上面的还是 select distinct(a) from myta
问题简介: 我正在开发一个生态生理模型,我使用了一个名为 S 的引用类列表。存储模型需要输入/输出的每个对象(例如气象、生理参数等)。 此列表包含 5 个对象(请参见下面的示例): - 两个数据帧,S
我有一个正在工作的问题陈述,但我仍然想知道更高效、更快,更重要的是正确设计来处理下面提到的场景。 我有一个 POJO 类 class A { String s; Double d; } 我正在
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this q
关于 LLVM 如何优化代码,关于 SO 以及整个网络都有一些非常好的描述。但这些都无法回答我的具体问题。 在 Xcode 中,项目和目标设置中有各种代码优化选项。我理解在开发过程中不需要优化,但为什
我正在用 C# 开发一个服务器项目,在收到 TCP 消息后,它会被解析并存储在一个精确大小的 byte[] 中。 (不是固定长度的缓冲区,而是存储所有数据的绝对长度的字节[]。) 现在为了阅读这个 b
我是一名优秀的程序员,十分优秀!