比方说,我有两个日期间隔,分别是09:00-16:00和13:00-18:00。我想检查两个间隔是否有共同的时间。上面的示例为13:00-16:00。
时间间隔的数据结构如下:
{
"begin": 324872,
"end": 532424
}
所以有一个转变,我想检查一个人是否正在做那个转变:
if(shift.Begin <= personWorkBegin && shift.End >= personWorkBegin)
但这不是解决方案,因为它必须在该间隔内,我只想检查公用部分。
答案 0 :(得分:2)
也许不是最整洁的解决方案,但应该可以解决问题:
if (personWorkBegin >= shift.Begin && personWorkBegin <= shift.End ||
personWorkEnd >= shift.Begin && personWorkEnd <= shift.End ||
personWorkBegin <= shift.Begin && personWorkEnd >= shift.End)
编辑:canton7指出,第四项检查是多余的,已被删除。
答案 1 :(得分:0)
您可以只执行第一个间隔的MainWindow::MainWindow(/* QWidget* parent or whatever */)
{
// connect called once in constructor
connect(camera, SIGNAL(sendImage(Mat)), this, SLOT(saveImage(Mat)), Qt::UniqueConnection);
}
void MainWindow::on_saveImageButton_clicked()
{
// toggle flag
saveNextImage = true;
}
void MainWindow::saveImage(Mat cvimg)
{
// check flag was set
if (!saveNextImage)
return;
// save/write operations
// ...
// instead of disconnecting...
// toggle flag
saveNextImage = false;
}
减去第二个间隔的end
。如果小于0,则没有重叠。如果大于0,则重叠间隔将是第一个间隔的start
加差。