如何在字符串中找到两个时间值的差异?

时间:2015-09-25 13:50:42

标签: c#

我正在研究c#中的一个新项目,我对日期和时间没有经验。

这里我需要找到两个时间值之间的差异,这是以字符串格式

string pointavalue = comboBox1.Text + ":" + comboBox2.Text + ":" + comboBox5.Text;
string pointbvalue = comboBox3.Text + ":" + comboBox4.Text + ":" + comboBox6.Text;
string pointcvalue = comboBox7.Text + ":" + comboBox8.Text + ":" + comboBox9.Text;
DateTime pointa = DateTime.Parse(pointavalue, System.Globalization.CultureInfo.CurrentCulture);
DateTime pointb = DateTime.Parse(pointbvalue, System.Globalization.CultureInfo.CurrentCulture);
DateTime pointc = DateTime.Parse(pointcvalue, System.Globalization.CultureInfo.CurrentCulture);
string time1 = pointa.ToString("HH:mm:ss");
string time2 = pointb.ToString("HH:mm:ss");
string time3 = pointc.ToString("HH:mm:ss");

有三个值pointavalue,pointbvalue。 pointcvalue。 它们是组合框的组合字符串值。

现在我如何从pointavalues中减去pointbvalues? 我知道它们是字符串格式,因此无法执行操作。

你正在寻找的代码不是我的,有人帮助我,但它的工作是预期的。

我正在学习C#所以请耐心等待。

好吧我认为找出一些东西,但我仍然无法解决它。

这是我最近使用代码

的工作
DateTime inputa = DateTime.Parse(label21.Text, System.Globalization.CultureInfo.CurrentCulture);
        DateTime inputb = DateTime.Parse(label23.Text, System.Globalization.CultureInfo.CurrentCulture);
if (pointa < pointb)
        {
            TimeSpan diff1 = pointb.Subtract(pointa);
            DateTime d1=Convert.ToDateTime(diff1);
            if (d1 < inputa)
            {
                label34.Text = "fail";
            }
            else
            {
                label34.Text = "pass";
            }

在这里,我想检查时间diff1和inputa的条件,这就是我完成这个项目所需的一切。

4 个答案:

答案 0 :(得分:1)

一个更简单的例子:

void Main()
{
    DateTime now = DateTime.Now;
    DateTime yesterday = now.AddDays(-1);
    TimeSpan difference = yesterday - now;
    Console.WriteLine (difference.GetType().Name);
    Console.WriteLine (difference.TotalSeconds); // expecting -86400
}

运行此将打印

TimeSpan
-86400

答案 1 :(得分:1)

您无法解决此问题的原因是您尝试比较两种不同的数据类型,Timespan和Datetime不相同

  • 将所有字符串转换为&#34; Timespan&#34; (这是更好的选择)。
  • 日期时间会给你现在的日期,但似乎你不需要它。
  • 最后但并非最不重要的是在提出这些问题之前先学习一些基础知识。

答案 2 :(得分:0)

查看DateTime.Substract method

.slideUp()

或者,你可以使用 - 运算符,你得到一个包含差异的Timespan:

TimeSpan abdiff = pointb.Substract(pointa);
TimeSpan bcdiff = pointc.Substract(pointb);

答案 3 :(得分:0)

假设您的组合框包含小时,分钟和秒,那么您可以执行以下操作。

TimeSpan pointa = new TimeSpan(int.Parse(comboBox1.Text), int.Parse(comboBox2.Text), int.Parse(comboBox5.Text));
TimeSpan pointb = new TimeSpan(int.Parse(comboBox3.Text), int.Parse(comboBox4.Text), int.Parse(comboBox6.Text));
TimeSpan pointc = new TimeSpan(int.Parse(comboBox7.Text), int.Parse(comboBox8.Text), int.Parse(comboBox9.Text));

TimeSpan aTob = pointa > pointb 
    ? pointa - pointb 
    : (pointa + TimeSpan.FromDays(1)) - pointb;

基本上,这假设您的组合框仅具有有效小时(0-23),分钟(0-59)和秒(0-59)值。然后你只需确定你的时间是否在同一天。如果您认为pointa晚于pointb,那么检查它是否大于pointb意味着您可以进行直接减法。如果没有,那么它必须是第二天的时间,你只需要加1天就可以减去pointb

这是基于你的断言01:00 - 23:00应该是2小时而不是-22。如果包含日期,那么您最好知道时间是在同一天或第二天,还是从完全不同的年份开始。