1

我正在开展一个项目,该项目从网上发布的火车时刻表中抓取出发时间列表。我意识到,如果我不使用如此粗略的方法来访问数据但没有可用的 API,这会容易得多,而且它更像是一个学习项目,而不是我期望公开发布的那种东西。

无论如何,我正在阅读的时间表以 12 小时格式显示时间,但没有 AM/PM(例如,只有 9:43)。我将时间作为近似的 unix 时间戳存储在数据库中,这意味着我需要我的脚本能够确定时间是上午还是下午。

我从列表中抓取的数据可能介于两小时前和未来六小时之间。因此,在上午 9 点运行脚本时,可能会列出即将到来的下午 2 点的火车,如果没有准时出发,早上 7 点的火车仍然可以在板上。

我写了一个函数,它需要两个参数——要评估的时间,以及当前系统时间,以作为“猜测”的基础(我意识到我可以让函数自己获取时间,但我正在尝试编写一个单元测试那失败了,这就是我这样做的原因)。我会把它贴在这里,但它并没有真正起作用,我想从你们这些好人的一些指导或提示开始重新开始。

谁能帮我吗?有什么好的方法来解决这个问题?

4

3 回答 3

1

如果您知道什么时候抓取了页面(您应该知道),并且您知道列出的时间(显然您知道),并且您知道页面访问的时间是 -2 到 +6(例如,您抓取的时间页)...我看不出问题出在哪里。看来您拥有所需的所有信息。

我在上午 11:30 (AM) 刮了一页。列出的出发时间为 2:15。好吧,当在上午 2:15 和下午 2:15 之间进行选择时,只有两个中的一个在 11:30(上午)之后不到 6 小时。如果我看到 10:30 的条目,我会知道它必须是“一小时前”,因为不会列出未来 11 小时的到达(根据您的解释)。

还是我错过了什么?

于 2010-11-10T01:52:37.230 回答
0

传统上,火车时刻表用浅色和粗体时间区分上午和下午。据我所知, pm 总是粗体。如果您的来源是这种情况,只需跟踪文本是否在 <b> 或 <strong> 内。

于 2010-11-10T02:16:58.160 回答
0

好的,我忘记了该脚本运行以将火车初始化为提前几个小时出现在板上,因此“2 小时前”的事情不是问题。这是我想出的,它似乎正在工作:

 function convertTime($input, $currentHour) {
    if ($currentHour >= 8 && $currentHour < 12 && $input < 8) {
        $input += 12;
    }
    if ($currentHour > 12 && $currentHour < 20 && $input < 12) {
        $input += 12;
    }
    if ($currentHour > 20 && $currentHour < 24 && $input > 8) {
        $input +=12;
    }
$return $input;
}
于 2010-11-10T03:07:25.157 回答