我在Delphi 2010中尝试了新的Record类型TTimeSpan.但我鼓励一个非常奇怪的问题.
assert(TTimeSpan.FromMilliseconds(5000).Milliseconds = 5000);
Run Code Online (Sandbox Code Playgroud)
这个断言没有通过.'TTimeSpan.FromMilliseconds(5000).Milliseconds'的值预计为5000,但它为0.
我深入挖掘:
function TTimeSpan.GetMilliseconds: Integer;
begin
Result := Integer((FTicks div TicksPerMillisecond) mod 1000);
end;
FTicks = 50000000
TicksPerMillisecond = 10000
FTick div TicksPerMillisecond = 50000000 div 10000 = 5000
(FTick div TicksPerMillisecond) mod 1000 = 5000 mod 1000 = 0 // I do not understand, why mod 1000
Integer((FTick div TicksPerMillisecond) mod 1000) = Integer(0) = 0
Run Code Online (Sandbox Code Playgroud)
我的代码解释是正确的,不是吗?
更新:方法GetTotalMilliseconds(双精度)正确实现.
如何获取DateTime.UtcNow每秒的滴答数并将其转换为String值?
不好的问题:再试一次百万分之一秒
我面临一个奇怪的问题.我的应用程序播放来自特定位置的电影,因此即使是以毫秒为单位提到的位置对我也很重要.我正在为媒体元素分配一个位置,但它显示错误的帧.我不知道为什么媒体播放器不会从我给出的位置上玩.
以下是一些示例代码:
TimeSpan oTimeSpan = TimeSpan.FromMilliseconds(16800200); // This shows 04:40:00.2000000
MediaPlayer.Position = oTimeSpan; // But after assigning, value is 04:40:00.1990000
Run Code Online (Sandbox Code Playgroud)
这是分配前后的屏幕截图:


谁能告诉我这里我做错了什么?
我一直在使用C#做一个小游戏,而在另一台PC上测试游戏时,我遇到了一些奇怪的时间问题.
我已经在这个游戏中设置了所有内容,根据自上一个游戏循环后的时间进行更新,在大多数情况下应该是这样,但在第二台PC上,一切都很顺利.
我发现问题与使用该FromTicks()方法创建TimeSpan有关.我使用以下代码进行了一些测试:
class Program
{
static void Main(string[] args)
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
sw.Stop();
TimeSpan t = TimeSpan.FromTicks(sw.ElapsedTicks);
Console.WriteLine(t.ToString());
Console.WriteLine(sw.Elapsed.ToString());
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的主PC上,我运行了这个程序,得到了以下内容:
00:00:00.3528353
00:00:00.9856987
我完全没想到的东西.我认为第二个结果是非常不准确的,但第一个结果很好.
然后我在另一台PC上运行相同的程序,得到了这个:
00:03:20.6866734
00:00:00.998287
我很震惊.
我的问题不是我如何解决这个问题,我已经决定使用第二种方法,因为它足够准确......相反,我要求启蒙.
怎么会这样呢?为什么第一个结果如此不准确?为什么这在不同的机器上变化很大?
我检查msdn以防我使用该方法错误,但那里的例子表明我的结果应该是不可能的......
注意:
我认为CMOS电池正在死亡/死亡,这是一个因素吗?
我正在制作一张图表 "1930-1940", "1940-1950", "1950-1960", "1960-1970", ...
我想用a DateTime和a 代表这个Timespan,但我不确定如何制作TimeSpan,我发现很难验证我的时间跨度是否正确.
这是我应该如何使用TimeSpan,还是重叠?如果它重叠,那么我该如何解决呢?
List<DateTime> list1 = new List<DateTime>();
List<TimeSpan> list2 = new List<TimeSpan>();
int startYearInt = 1930;
int times = 0;
const int intervalSize = 10;
for (int i = startYearInt; i < 2020; i += intervalSize)
{
DateTime sYear = new DateTime(startYearInt + (intervalSize * times++), 1, 1);
TimeSpan period = (sYear.AddYears(intervalSize)) - sYear;
list1.Add(sYear);
list2.Add(period); // <<-- Don't know if if this is correct? …Run Code Online (Sandbox Code Playgroud) 我有List<T>24小时内的可用时间,以及两个TimeSpans,minTime和maxTime.
我需要找到内一天的时间List<T>,该之间土地minTime和maxTime,但是由于这个正在多个时区中使用时,minTime和MAXTIME可以在不同的日子和跨越像下午1点至凌晨1点,第二天
我最接近的就是这个,但我觉得我在这里缺少一些主要的组件,或者做一些非常低效的事情,因为我对这个TimeSpan对象很新.我只是无法弄清楚是什么......
// Make new TimeSpan out of maxTime to eliminate any extra days (TotalHours >= 24),
// then check if time on the MaxTime is earlier than the MinTime
if (new TimeSpan(maxTime.Hours, maxTime.Minutes, maxTime.Seconds) < minTime)
{
// If time on MaxTime is earlier than MinTime, the two times span separate days,
// so find first time after minTime OR before maxTime
nextAvailableTime = Times.FirstOrDefault(p => …Run Code Online (Sandbox Code Playgroud) 我实现了下面的RandomDate,但我总是让值关闭到"从"日期,我可能会错过这里的东西....
public static DateTime GetRandomDate(DateTime from, DateTime to)
{
var range = new TimeSpan(to.Ticks - from.Ticks);
var rnd = new Random();
var randTimeSpan = new TimeSpan((long)(range.TotalSeconds - rnd.Next(0, (int)range.TotalSeconds)));
return from + randTimeSpan;
}
Run Code Online (Sandbox Code Playgroud) 我想转换
var delta = TimeSpan.FromSeconds(10);
Run Code Online (Sandbox Code Playgroud)
像字符串一样 00:00:01
我试试这个 delta.ToString(@"0:\\hh\\:mm\\:ss", System.Globalization.CultureInfo.InvariantCulture);
但没有什么工作正常.另外我在这里找不到https://msdn.microsoft.com/en-us/library/ee372287.aspx这样做的正确方法.
方法ToString()没有帮助所以我需要格式谎言hh:mm:ss.
我试图在这段代码中使用三元运算符,其Model.FirstTechSupportAssigneeElapseTime类型为TimeSpan?:
<dt>Assigned In</dt>
<dd>
@if (@Model.FirstTechSupportAssigneeElapseTime == null)
{ @:N/A }
else
{ @Model.FirstTechSupportAssigneeElapseTime }
</dd>
Run Code Online (Sandbox Code Playgroud)
我试图实现三元运算符,但我失败了,@的处处让我感到困惑.在这种情况下,是否可以拥有三元运算符?
谢谢.
Smalltalk 中是否有一个内置函数可以将两个时间跨度作为输入,并检查它们是否相交?
例如:两个时间跨度 2018/01/01-2018/01/05 和 2018/01/03-2018/01/10 确实相交,并且此函数应输出 true。
更新:我实现了以下方法:
checkIntersection: aTimespan
"returns true if two timespans overlap and false if not"
| start1 end1 start2 end2 |
start1 := self start.
end1 := self end.
start2 := aTimespan start.
end2 := aTimespan end.
(start1 = start2)
ifTrue: [ ^true ].
(start1 = end2)
ifTrue: [ ^true ].
(end1 = start2)
ifTrue: [ ^true ].
(end1 = end2)
ifTrue: [ ^true ].
(start2 < start1 and: [ (start1 < end2) ]) …Run Code Online (Sandbox Code Playgroud) timespan ×10
c# ×8
asp.net ×3
datetime ×3
.net ×2
.net-4.0 ×1
delphi ×1
delphi-2010 ×1
performance ×1
random ×1
razor ×1
record ×1
silverlight ×1
smalltalk ×1
stopwatch ×1
time-format ×1
wpf ×1