我正在开展一个项目,我处于这种情况的前面:
我解析文件并获取值以填充数据库。
我的文件可以像那样恢复:
xxxxxxx date=2014-04-26 xxxxxx (the first line)
Action1 xxxxxx time=12:00:00
Action2 xxxxxx time=12:05:00
我的Mysql表:
Action varchar
Time Datetime
我将每隔5分钟收到一个新文件,并在我的表格中保存Action和DateTime(我需要使用第一行的日期)。
所以可能出现的问题是:
xxxxxxx date=2014-04-26 xxxxxx (the first line)
Action1 xxxxxx time=23:57:00
Action2 xxxxxx time=00:02:00
确实,在00:00:02,日期不正确。
但是下次会好的,因为我会:
xxxxxxx date=2014-04-27 xxxxxx (the first line)
Action1 xxxxxx time=00:02:00
Action2 xxxxxx time=00:07:00
有人知道我能做些什么来解决这种情况?
提前致谢
Ps:我用PHP编码
答案 0 :(得分:1)
您几乎必须保证'time='
值按升序排列,并且文件中的第二行('time='
)实际上是'date='
中表示的日期值的时间{1}}来自上一行。
我会像这样接近它:
从'date='
行开始,保留该值(在变量中),以便在处理下一行时可用。
在下一行中,使用保存的'date='
值和当前行的'time='
,然后将这些值组合起来为该行生成DATEIME。保存'date='
和'time='
组件值(在变量中),以便在处理文件中的下一行时可以使用这些值。
处理下一行时,计算前一行的'date='
和'time='
之间的持续时间(保存在变量中)与'date='
值相同的{{1}来自当前(新)行的值。
如果持续时间大于或等于零,则假设它是相同的日期。 (使用保存的'time='
值和新的'date='
值创建要分配给该记录的DATETIME。)
如果持续时间小于零(负数),那么您可以假设'time='
部分已转到第二天,因此将保存的'date='
值增加一天。将新增加的date=
值与该行的'date='
值组合,以创建要分配给该记录的DATETIME。
对每个后续行重复此操作,保存分配给该行的DATETIME的'time='
和'date='
组件。计算持续时间,任何时候出现负数,将保存的'time='
值增加1。
这就是我要使用的方法。
(我想你可能需要重置'date='
保存变量,当你遇到文件中的下一个'time='
行时,将其设置为00:00:00,所以计算持续时间将是积极的。)
在一个更普遍的问题中,有一个持续时间超过24小时的角落情况,但没有好办法从文件中显示的数据中检测出来。