检查两个日期间隔是否有共同时间

时间:2019-02-20 15:13:16

标签: c# date

比方说,我有两个日期间隔,分别是09:00-16:00和13:00-18:00。我想检查两个间隔是否有共同的时间。上面的示例为13:00-16:00。

时间间隔的数据结构如下:

{
    "begin": 324872,
    "end": 532424
}

所以有一个转变,我想检查一个人是否正在做那个转变:

if(shift.Begin <= personWorkBegin && shift.End >= personWorkBegin) 

但这不是解决方案,因为它必须在该间隔内,我只想检查公用部分。

2 个答案:

答案 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加差。