以下代码
Console.WriteLine("{0:%h} hours {0:%m} minutes",
new TimeSpan(TimeSpan.TicksPerDay));
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
0小时0分钟
我想要的是这个输出:
24小时0分钟
我在这个格式字符串中缺少什么?
PS我知道我可以手动将TimeSpan分成几天和几小时,并将两者相乘,但宁愿使用自定义格式字符串,因为这些时间跨度显示在silverlight数据网格中,人们期待看到horus,而不是几天.
现在是8:30,我试图找出从现在到下一个整个小时(9:00)之间的秒数.我想我只是想DateTime.Now.AddHours(1)但在我这样做后,我认为我需要"地板".如何获得这个价值?
谢谢.
当计算两个DateTime对象之间的毫秒差异时,我似乎总是得到一个返回的数字,其中数字的小数部分与数字的整数分量相同.例如:1235.1235
为什么会这样?难道我做错了什么?这是语言的怪癖还是DateTime粒度的限制或其他什么?
这可以使用以下代码演示:
DateTime then = DateTime.Now;
Thread.Sleep(1234);
DateTime now = DateTime.Now;
TimeSpan taken = now - then;
string result = taken.TotalMilliseconds.ToString(CultureInfo.InvariantCulture);
//result = "1235.1235"
Run Code Online (Sandbox Code Playgroud)
由CodesInChaos评论:
DateTime`不准确到这个精度级别:参见C#DateTime.Now precision
但是 - 这并不能解释这种行为.
我有一个报告和一个数据源,其中一列是TimeSpan类型.我使用时Fields!TheTime.Value,TimeSpan值似乎在报告中正确显示,没有问题.
但是我想对这些值进行求和来得到一个组的总时间.在C#中,我当然可以做一个TimeSpan +另一个TimeSpan,所以我知道它们可以添加.我试过了
=Sum(Fields!TheTime.Value)
Run Code Online (Sandbox Code Playgroud)
但它最终会打印出很多类型.例如,对于上面输出的时间,我会得到457800000000总和.甚至应该是什么?
无论如何,我如何在报告中总结时间跨度值?对于上述时间跨度,我想最终12:43:00得到总和.除非我的脑袋再次在数学上失败了......但是你明白了:p
我正在查看System.Web.Configuration.CompilationSection的元数据,并注意到该属性的以下属性TimeSpan BatchTimeout:
[TimeSpanValidator(MinValueString = "00:00:00",
MaxValueString = "10675199.02:48:05.4775807")]
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么这是允许的最大值?TimeSpan本身有一个上限,为什么会有另一个值验证,为什么这个数字?
假设我有2个日期范围.
这些日期范围可以表示为时间跨度.
我想找到一个日期范围,在两个时间跨度内.
Range 1: 2/1/2011 - 8/1/2011 (timespan of 6 months)
Range 2: 5/2/2011 - 5/28/2011 (timespan of 26 days)
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,交叉点将是5/2/2011-5/28/2011,但是范围可以向任一方向移动(或者根本不相交)在这种情况下我希望得到的时间跨度为0长度)
最后,我需要生成交叉时间跨度的开始/结束的日历日期(不仅仅是刻度/小时/天等)
在c#3.0中有一种优雅的方法吗?
UPDATE
我使用了StriplingWarriors代码并创建了一个方法.
private static DateRange GetIntersectionRange(DateRange range1, DateRange range2) {
var iRange = new DateRange();
iRange.From = range1.From < range2.From ? range2.From : range1.From;
iRange.To = range1.To < range2.To ? range1.To : range2.To;
if (iRange.From > iRange.To) iRange = null;
return iRange;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ASP.NET MVC 3上的LINQ进行查询.
我有一个模型,我们称之为事件.此Event对象具有DateTime?的Date属性.我想要的是获取2个TimeSpans之间的事件.
现在我的代码如下所示:
TimeSpan From = new TimeSpan(8,0,0);
TimeSpan Until = new TimeSpan(22,0,0);
var events =
from e in db.Events
where e.Date.Value.TimeOfDay >= From,
e.Date.Value.TimeOfDay <= Until
select e;
Run Code Online (Sandbox Code Playgroud)
抛出异常,告诉我"LINQ to Entities中不支持指定的类型成员'TimeOfDay'."
我无法解决这个问题,而且我一整天都在努力.请帮助我,我很沮丧.:(
编辑:
我忘了在e.Date.Value之后写下"TimeOfDay".无论如何,我在我的代码中做了.
我无法使用DateTime,因为我必须过滤在一天的特定时间之间发生的事件,尽管事件的日期.
当我尝试将TimeSpan值存储到ApplicationData设置中时,我收到错误,因为无法序列化TimeSpan.这个问题显示了如何处理它:如何将TimeSpan序列化为XML
为什么TimeSpan不容易序列化?
并且,是否有无法序列化的数据类型列表?
我把分钟转换成小时.所以,如果我有minutes = 12534.结果应该是208:54.以下代码未能带来此结果.
TimeSpan spWorkMin = TimeSpan.FromMinutes(12534);
string workHours = spWorkMin.ToString(@"hh\:mm");
Console.WriteLine(workHours);
Run Code Online (Sandbox Code Playgroud)
结果是16:54.
如何弄清楚?
我正在使用代码
var minutesPassed = (DateTime.UtcNow - conversionsList.Last().DateStamp).TotalMinutes;
Run Code Online (Sandbox Code Playgroud)
计算两个日期之间经过的分钟数.我得到的结果看起来像
254.54445556
我得到分钟和秒钟.如何得到只包含这样的分钟的结果
254
?
timespan ×10
c# ×8
datetime ×3
.net ×2
asp.net-mvc ×1
formatting ×1
linq ×1
silverlight ×1
sql-server ×1
sum ×1
validation ×1