我有一个日期列表,格式如下:YYYY-MM-DD
我希望能够按年份(2013年,2012年,2011年)按降序排序,然后按月升序(1月,2月,3月......)。所以我正在寻找的是:
2013-01-01
2013-02-01
2013-03-01
2013-04-01
2013-05-01
2012-01-01
2012-02-01
2012-03-01
...
2012-12-01
2011-01-01
2011-02-01
2011-03-01
...
2011-12-01
请注意,本年度的列表在12月之前是不完整的,所以这就是为什么它只会到2013-05-01。前几年将在1月至12月完成。
我做了一个类似于此的泡泡排序:
For i = 0 to Ubound(dateArray)
For j = i + 1 to Ubound(dateArray)
if dateArray(i) > dateArray(j) then
tempDate = dateArray(i)
dateArray(i) = dateArray(j)
dateArray(j) = tempDate
end if
Next
Next
但是这给了我一个如下所示的列表:
2011-01-01
2011-02-01
2011-03-01
...
2011-12-01
2012-01-01
2012-02-01
2012-03-01
...
2012-12-01
2013-01-01
2013-02-01
2013-03-01
2013-04-01
2013-05-01
关闭,但不完全。
答案 0 :(得分:2)
当两年中的年份相同时,您需要对升序进行排序,而当年份不同时,您需要降序:
Sub SwapValues(ByRef a, ByRef b)
buf = a : a = b : b = buf
End Sub
...
If Year(dateArray(i)) = Year(dateArray(j)) Then
If dateArray(i) > dateArray(j) Then
SwapValues dateArray(i), dateArray(j)
End If
Else
If dateArray(i) < dateArray(j) Then
SwapValues dateArray(i), dateArray(j)
End If
End If
我添加了一个交换值的过程,以简化代码。
答案 1 :(得分:1)
我之前见过这个......我想这就是我解决它的方法。
For i = 0 to Ubound(dateArray)
For j = i + 1 to Ubound(dateArray)
if (year(dateArray(i)) < year(dateArray(j))) or (year(dateArray(i)) = year(dateArray(j)) and month(dateArray(i)) > month(dateArray(j)))then
tempDate = dateArray(i)
dateArray(i) = dateArray(j)
dateArray(j) = tempDate
end if
Next
Next