Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理负时间跨度_C#_.net_Datetime_Timespan - Fatal编程技术网

C# 处理负时间跨度

C# 处理负时间跨度,c#,.net,datetime,timespan,C#,.net,Datetime,Timespan,在我的网格输出中,我计算一个时间跨度,并取其总小时数。e、 g (Eval("WorkedHours") - Eval("BadgedHours")).TotalHours 目标是将TotalHours显示为39:44,因此我需要将值从7.5转换为07:30。这没问题。。。除非是阴性 我可以使用从Hours创建TimeSpan对象 TimeSpan.FromHours( (Eval("WorkedHours") - Eval("BadgedHours")).TotalHours) 如果是负数

在我的网格输出中,我计算一个
时间跨度
,并取其
总小时数
。e、 g

(Eval("WorkedHours") - Eval("BadgedHours")).TotalHours
目标是将
TotalHours
显示为
39:44
,因此我需要将值从
7.5
转换为
07:30
。这没问题。。。除非是阴性

我可以使用从
Hours
创建
TimeSpan
对象

TimeSpan.FromHours( (Eval("WorkedHours") - Eval("BadgedHours")).TotalHours)

如果是负数,我无法将其转换为
DateTime
以使用
.ToString(“HH:mm”)
方法,并且
TimeSpan
对象不支持格式字符串。

只需将其乘以-1或使用绝对值函数。

简单的解决方案是:

string format = "HH:mm";
if(hours < 0)
  format = "-" + format;

hours = Math.Abs(hours)
string format=“HH:mm”;
如果(小时<0)
format=“-”+格式;
小时=Math.Abs(小时)
静态字符串到hmstring(TimeSpan TimeSpan){
if(timespan.Ticks<0)返回“-”+ToHMString(timespan.Negate());
返回timespan.TotalHours.ToString(“#0”)+”:“+timespan.Minutes.ToString(“00”);
}
控制台写入线(ToHMString(TimeSpan.FromHours(3))//打印“3:00”
控制台写入线(ToHMString(TimeSpan.FromHours(-27.75))//印刷品“-28:45”

如果timespan超过24小时,这也将正常工作。

timespan类中有一个否定方法

链接到MSDN文档:
是否有
TimeSpan.Duration
方法?我认为这将处理您正在尝试做的事情。

您好,我已经将此工作转化为我一直在编写的一些代码,希望能有所帮助

(结果)是一个int变量

(TimeSpan.frommins(result))

它可以工作。试试这个


mytimespam.Negate()

我查遍了每一个地方。但我没有得到正确的答案,这就是为什么我用这种方式来完成

TimeSpan diff = actualout.Subtract(actualin);
 string a =(diff.ToString()).ToString();
if(a.Contains("-"))
 {        
 diff = new TimeSpan(0,0,0,0);
}
TimeSpan Diff=Date1-Date2;
如果((int)Diff.TotalDays<0){//您的代码}

请考虑将代码片断重新格式化为内联代码或代码段,并添加适当的平台标记(我想从您的代码段中猜测.NET)。对于Google的任何人,请使用<代码> TimeSIP.持续时间< /Code >方法。从MSDN:“返回一个新的TimeSpan对象,其值为当前TimeSpan对象的绝对值”。这是最简单的方法,只需减去两个DateTimes,对结果调用Duration(),然后执行TotalHours.time垃圾邮件,呵呵;)更简单的方法是比较
if(diff
TimeSpan diff = actualout.Subtract(actualin);
 string a =(diff.ToString()).ToString();
if(a.Contains("-"))
 {        
 diff = new TimeSpan(0,0,0,0);
}