【问题标题】:how to compute the difference between the two times如何计算两次之间的差异
【发布时间】:2015-06-08 10:26:52
【问题描述】:

谁能帮我计算出这个时间。我需要减去有时间数据的两列值

  • col1 是 aamhr
  • col2 是 aammin
  • col3 是 aamcutoffhr
  • col4 是 cutoffmin

我想以某种方式将aamhr 和aammin 合并为aamhr:aammin 和aamcutoffhr:aamcutoffmin,我想减去aamhr:aammin-aamcutoffhr:aamcutoffmin。

为此,我使用了日期时间变量publishtime、cutofftime 和pubtime。

  • publishtime 是 aamhr:aammin 的串联。
  • cutofftime 是 aamcutoffhr 和 aamcutoffmin 的串联。
  • 两者的区别是pubtime。

但我遇到了错误。我试过以下代码:

public Boolean CheckAamTime(string day)
{
    //DRM.Connectdb  obj= new DRM.Connectdb();

    string qry;
    Boolean flag=false;
    DateTime publishtime;
    DateTime cutofftime,pubtime;
    SqlConnection SqlCon= null;
    SqlCon = new SqlConnection(SqlConStr);
    //      
    qry="select jas_L_hour, jas_L_minute,jas_L_cutoffhour,jas_L_cutoffminute  from journalaopschedule where" 
        & "jas_L_journalid in " & "(" & "select jm_L_journalid from journalmaster where jm_T_acronym='jid') and JAS_L_Day"& "='monday' and " & "JAS_IsAAM"& "='1'";
    SqlCon.Open();  
    SqlCommand cmd= new SqlCommand(qry,SqlCon);
    SqlDataReader SqlRead = cmd.ExecuteReader();    
    if(SqlRead.HasRows)
    {
        while(SqlRead.Read())
        {
            publishtime=Convert.ToDateTime(SqlRead["jas_L_hour"] );
            publishtime= publishtime & ":" &  Convert.ToDateTime(SqlRead["jas_L_minute"]);
            cutofftime=Convert.ToDateTime(SqlRead["jas_L_cutoffhour"].ToString());
            cutofftime= cutofftime & ":" & Convert.ToDateTime (SqlRead["jas_L_cutoffminute"].ToString());
        }
    }
    else
    {
        // sendemail menuscript time has not set
    }

    SqlCon.Close();
    pubtime= publishtime.Subtract(cutofftime);
    //log("timediff" & pubtime.ToString );

    if (pubtime>=DateTime.Today)
    {
        flag=true;
    }
}

【问题讨论】:

    标签: c# sql-server datetime


    【解决方案1】:

    您应该使用 TimeSpan 并假设字段是整数:

    ...
    TimeSpan publishtime;
    TimeSpan cutofftime, pubtime;
    ...
    if (SqlRead.HasRows)
    {
        while (SqlRead.Read())
        {
            publishtime = new TimeSpan(Convert.ToInt32(SqlRead["jas_L_hour"]), Convert.ToInt32(SqlRead["jas_L_minute"]), 0);
            cutofftime = new TimeSpan(Convert.ToInt32(SqlRead["jas_L_cutoffhour"]), Convert.ToInt32(SqlRead["jas_L_cutoffminute"]), 0);
        }
    }
    ...
    pubtime = publishtime - cutofftime;
    ...
    

    【讨论】:

      【解决方案2】:

      让diff=(aamhr-aamcutoffhr)*60+aammin-aamcutoffmin。然后diffhr=diff/60 和diffmin=diff%60。

      【讨论】:

        【解决方案3】:

        在两个日期时间(字面意思是:date1 - date2)上使用减法运算符 (-) 会产生一个 TimeSpan 类型的对象,其中包含计算日期时间差异所需的所有内容。

        你说你遇到了很多错误,你能更具体吗?

        【讨论】:

          【解决方案4】:

          查看TimeSpan

          它可以帮助你计算2次之间的差异

          要合并 2 列,您可以这样使用:

          DateTime.ParseExact(DateTime.Today() + HourColumn + ":" + MinuteColumn, "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture)

          例子:

          string startTime = "7:00 AM";
          string endTime = "2:00 PM";
          
          TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));
          
          Console.WriteLine(duration);`
          

          【讨论】:

          • 嗨@arjit 感谢您的回复,但您能否告诉我如何连接两个时间值。例如。我在两列中有小时和分钟,首先需要合并,然后与其他两列进行比较。
          • @KhushiSharma 你能给我两列的格式吗?
          • JAS_L_Hour JAS_L_Minute 14 00 JAS_L_CutoffHour JAS_L_CutoffMinute 40 00 这些都是 db 中的 varchar 时间。我需要合并 (jas_L_hour+jas_L_minute)-(jas_l_cutoffhr+jas_L_cutoffminute)
          • DateTime.ParseExact(DateTime.Today() + HourColumn + ":" + MinuteColumn, "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture)
          • 试试上面的方法。这应该可行,您可能需要根据需要修剪 hour n min 列
          猜你喜欢
          • 2013-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多