两个时间跨度之间的差异为负

时间:2012-09-02 09:57:21

标签: c#

我在人力资源项目中,我需要为员工定义Shift Shift有两个用于读卡的游戏,Swipein和swipeOut。我使用两个datetimepicker,格式为time,showupdown为true,设置滑动进出时间 并阅读如下

public void calculateduration()
    {
        TimeSpan swipein = dtp_toTime.Value.TimeOfDay;
        TimeSpan swipeout = dtp_FromTime.Value.TimeOfDay;
        TimeSpan duration = dtp_toTime.Value.TimeOfDay - dtp_FromTime.Value.TimeOfDay;
        MessageBox.Show(duration.ToString());

    }

在我的SQL服务器数据库中,我将所有这三个feilds swipein,swipeout,duration作为Time数据类型,我想在那里插入这些值

为了测试,我给出了四个值

Swipein Swipeout Duration(显示输出) 上午8点,下午4点,8小时>>>>>当天的第二天班次

下午3点10点8小时>>同一天的夜晚狡猾的

晚上10点6点(次日)-16小时>>> prblm..8必须来这里

任何想法都会 或者任何人都可以告诉我一个想法,检查收到的持续时间是否为负值,如

if(duration <0)
{
duration= 24-duration;
} 

2 个答案:

答案 0 :(得分:2)

您可以在减去它们之前检查它们:

TimeSpan duration;
if (swipeout >= swipein) {
  duration = swipeout - swipein;
} else {
  duration = swipeout + new TimeSpan(1, 0, 0, 0) - swipein;
}

答案 1 :(得分:0)

问题在于TimeSpan结构旨在表示时间间隔,而不是特定时间。因此,在这种情况下,使用TimeSpan持续时间是有道理的,但是更好地用DateTime表示swipein和swipeout。

public void calculateduration()
{
    DateTime swipein = dtp_toTime.Value;
    DateTime swipeout = dtp_FromTime.Value;
    TimeSpan duration = swipeout - swipein;
    MessageBox.Show(duration.ToString());
}

(当然,这假设dtp_ToTime.Value和dtp_FromTime.Value是DateTimes,但我猜他们是......)