【问题标题】:Combine Two Strings and Order them by Date/Time合并两个字符串并按日期/时间排序
【发布时间】:2012-02-22 04:39:00
【问题描述】:

我想看看是否可以合并两个字符串并按日期/时间排序?

dim strcountstf
dim strDateNTimes
dim strCOMBO
strcountstf = "02/01/2012 3:05am###,02/02/2012 7:05am###,02/05/2012 8:30pm###"
strDateNTimes = "02/01/2012 2:20am###,02/02/2012 8:00am###,02/06/2012 6:45pm###"

strCOMBO = strcountstf & strDateNTimes

现在 strCOMBO 会将两个字符串一起提供给我,但我需要按日期/时间对它们进行排序,也许使用 CDate 函数?

再次感谢大家,我非常感谢您给我的所有帮助。

【问题讨论】:

  • 如果您将日期设置为 UTC 格式,您可以简单地按 ASCII 顺序对其进行排序
  • 这缺少一些东西。您的 strCOMBO 只是一个连接的字符串。我们如何只对一个连接的字符串进行排序?你在喂这些东西吗?它们是否需要用逗号分隔,连接然后排序?您是否希望先对 strcountstf 和 strDatesNTimes 进行排序,然后将其连接起来?如果您愿意,请提供更多信息。
  • @mastashake57 strcountstf 和 strDateNTimes 都是数组,一个来自 ms access 数据库,另一个来自 sql 数据库。当我查询/打开/调用表格时,我可以并且将让它们订购。现在我得到了 2 个要组合的字符串,然后按日期/时间对它们进行排序,所以有点将 stringA 与 stringB 连接起来,然后按日期/时间排序。我希望这更有意义,谢谢你的问题 mashake57 我希望我说得更清楚
  • 这与您昨天的问题有关吗?您是否尝试在 Access 中创建一个视图来合并您的结果?

标签: asp-classic vbscript


【解决方案1】:

看看this quetion 并使用它,你可以做这样的事情

dim strcountstf
dim strDateNTimes
dim strCOMBO
dim arrCOMBO
dim strCOMBOSorted
dim objSortedList
dim i

strcountstf = "02/01/2012 3:05am###,02/02/2012 7:05am###,02/05/2012 8:30pm###"
strDateNTimes = "03/01/2011 2:20am###,02/02/2012 8:00am###,02/06/2012 6:45pm###"

strCOMBO = strcountstf & "," & strDateNTimes

arrCombo = Split(strCOMBO, ",")

Set objSortedList = Server.CreateObject("System.Collections.SortedList")

For i = LBound(arrCombo) To UBound(arrCombo)
    Call objSortedList.Add(CDate(Replace(arrCombo(i), "###", "")), arrCombo(i))
Next

strCOMBOSorted = ""

For i = 0 To objSortedList.Count - 1
    strCOMBOSorted = strCOMBOSorted & ", " & objSortedList.GetByIndex(i)
Next

strCOMBOSorted = Right(strCOMBOSorted, Len(strCOMBOSorted) - 2)

Set objSortedList = Nothing

Response.Write("<br>")
Response.Write(strCOMBO)
Response.Write("<br>")
Response.Write(strCOMBOSorted)

结果:

02/01/2012 3:05am###,02/02/2012 7:05am###,02/05/2012 8:30pm###,03/01/2011 2:20am###,02/02/2012 8:00am###,02/06/2012 6:45pm###
03/01/2011 2:20am###, 02/01/2012 3:05am###, 02/02/2012 7:05am###, 02/02/2012 8:00am###, 02/05/2012 8:30pm###, 02/06/2012 6:45pm### 

请注意,您必须确保可以使用 CDate 函数解析字符串并生成有效日期,或者在调用 Call objSortedList.Add(CDate(Replace(arrCombo(i), "###", "")), arrCombo(i)) 时执行任何您必须执行的操作,即第一个参数 (Key) 必须是有效日期,如果你想按日期排序。

【讨论】:

  • 我认为你在正确的轨道上我只是无法正确排序,你能再看看吗?
  • @Diodeus 但是我怎样才能将它们组合起来,然后在它们组合后对它们进行排序?
  • @compcobalt:对我来说似乎工作正常。您的脚本将运行什么语言环境?您的日期格式对区域设置很敏感。
  • @AnthonyWJones 你的第一次约会是什么时候?现在是 2011 年 3 月 1 日凌晨 2:20### 吗?除了第一次约会,一切都顺利吗? (注:月份为三号(03))
  • @compcobalt,我使用 en-US 语言环境更新了评论。您必须确保密钥是有效日期。
【解决方案2】:

只是我的版本

  Option Explicit 

  Dim strcountstf, strDateNTimes, strCOMBO, strArr, ans, a, j, temp


  strcountstf = "02/01/2012 3:05am###,02/02/2012 7:05am###,02/05/2012 8:30pm###"
  strDateNTimes = "02/01/2012 2:20am###,02/02/2012 8:00am###,02/06/2012 6:45pm###"

  strCOMBO = strcountstf &","& strDateNTimes


  strArr = Split(strCOMBO,",")


  for a = UBound(strArr) - 1 To 0 Step -1
      for j= 0 to a
         if strArr(j)>strArr(j+1) then
            temp=strArr(j+1)
            strArr(j+1)=strArr(j)
            strArr(j)=temp
        end if
    next
 next

For a =0 to UBound(strArr)
   ans= ans &","& strArr(a)
Next
ans= Right(ans,Len(ans)-1)
MsgBox ans

【讨论】:

  • 这确实适用于给定的字符串数据,但只是因为在这种情况下,各个字符串将与&gt; 进行比较,就像它们所代表的日期一样。但是,如果其中一个字符串是“02/02/2012 2:00pm”,它会失败,因为从词法上讲,这个字符串会出现在“02/02/2012 8:00am”之前,但是作为日期类型,它会在它之后。
  • 同一问题的第 2 部分here
猜你喜欢
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
相关资源
最近更新 更多