我正在做一个项目,我遇到了这种情况:
解析文件并获取值以填充数据库。
我的简历可以是这样的:
xxxxxxx date=2014-04-26 xxxxxx (the first line)
Action1 xxxxxx time=12:00:00
Action2 xxxxxx time=12:05:00
My Mysql Table:
Action varchar
Time Datetime
我将每5分钟收到一个新文件,并保存Action和DateTime(我需要使用第一行的Date)在我的表中。
可能出现的问题是:
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
有人知道我该怎么做才能解决这种情况吗?
Thanks in advance
Ps:我在PHP编码
您几乎必须保证'time='
值按升序排列,并且文件中的第二行(带有'time='
)实际上是前一行'date='
中表示的日期值的时间。
我将这样处理它:
在具有'date='
的行中,保留该值(在一个变量中),以便在处理下一行时可用。
在下一行中,使用保存的'date='
值和当前行的'time='
值,并将它们组合为该行的DATEIME。保存'date='
和'time='
组件值(在变量中),以便在处理文件中的下一行时可以使用这些值。
当您处理下一行时,计算前一行的'date='
和'time='
之间的持续时间(保存在变量中),具有相同的'date='
值以及当前(新)行的'time='
值。
如果持续时间大于等于零,则假定是同一日期。(使用保存的'date='
值和新的'time='
值创建DATETIME来分配给该记录)
如果持续时间小于零(负),则可以假设'date='
部分已滚动到第二天,因此将保存的date=
值增加一天。将新增加的'date='
值与该行的'time='
值结合起来,创建要分配给该记录的DATETIME。
对随后的每一行重复此操作,保存分配给该行的DATETIME的'date='
和'time='
组件。计算持续时间,当出现负数时,将保存的'date='
值增加1。
这就是我要用的方法。
(我认为您可能需要重置'time='
保存变量,当您遇到文件中的下一个'date='
行时将其设置为00:00:00,因此持续时间的计算将是正的)
在一个更普遍的问题中,存在持续时间超过24小时的极端情况,但是从文件显示的数据中没有很好的方法来检测。