【问题标题】:How I get a positive TimeSpan If the second DateTime is bigger then the first?如何获得第二个 DateTime 的正 TimeSpan 大于第一个?
【发布时间】:2014-03-06 13:29:56
【问题描述】:

您好,我对 C# 中的 TimeSpan 有疑问。

在我的应用程序中,我计算了两次的差异。这是怎么回事->

12:00:30 - 12:00:00 = 00:00:30 

但我的问题是如果第二次比第一次大...我得到一个负数:(

1:00:00 - 23:00:00 = -22:00:00 

但是我想要一个正数怎么这样-->

1:00:00 - 23:00:00 -> 2:00:00 

这是我的代码:

private static int GetTimeSpan(string Out, string In) {

            try
            {
                TimeSpan diff = DateTime.Parse(In) - DateTime.Parse(Out);

                double TotalSec = diff.TotalSeconds;

                return (int)TotalSec;
            }
            catch (Exception)
            {
                return 0;
            }

        }

【问题讨论】:

  • 你不能只检查哪个更大并从中减去另一个吗?
  • 你将如何区分一个异常和两个相同的可能或可能不是时间,例如对于您的代码,12:00:00-12:00:00 将与 'fish'-'elephant' 相同。不要将字符串作为输入,取一个DateTime/Timespan。遵循 SRP 的明确案例。

标签: c# asp.net datetime time timespan


【解决方案1】:

您正在寻找TimeSpan.Duration(),它返回TimeSpan 的绝对值:

TimeSpan diff = (DateTime.Parse(In) - DateTime.Parse(Out)).Duration();

【讨论】:

  • 我和你一起解决 22:00:00 小时,但我想得到 2:00:00 :(
  • @Tarasov:嗯,那是因为你的进出日期相差 22 小时。您希望获得 2 小时结果的逻辑是什么?实际的 DateTime 值是多少?
  • @Jon,我怀疑(并试图在我的回答中表明)OP 希望第二次总是被对待并且是第一次的前身。因此,在问题的示例中,1:00 被视为第二天的时间。而且今天 1:00 和昨天 23:00 之间确实相差 2 小时
  • @Andrei:看起来是这样,但我不确定。我觉得我们需要知道日期部分是怎么回事,因为这种操作非常不寻常,坦率地说感觉不对。它会模拟什么样的真实世界数量?
  • 如何创建一个新的 DateTime 如何(23:59:59)?
【解决方案2】:

怎么样

 DateTime dt1 =  DateTime.Parse(In);
 DateTime dt2 =  DateTime.Parse(Out);
 TimeSpan diff = (dt1>dt)? dt1- dt2 : dt2 - dt1; 

【讨论】:

    【解决方案3】:

    你可以查看计算结果,如果是负数,加上24小时得到补码时间跨度:

    TimeSpan diff = DateTime.Parse(In) - DateTime.Parse(Out);
    if (diff.TotalSeconds < 0) {
        diff = diff.Add(new TimeSpan(24, 0,0));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2021-12-04
      • 2019-10-19
      相关资源
      最近更新 更多