标签: timespan

处理和存储经过的时间

我在确定处理和存储时间测量的最佳方法时遇到了问题.

我的应用程序有一个文本框,允许用户以hh:mm:ss或mm:ss格式输入时间.

因此,我计划解析此字符串,在冒号上对其进行标记并创建TimeSpan(或使用TimeSpan.Parse(),并在mm:ss情况下添加"00:")以用于我的业务逻辑.好?

我如何将其存储在数据库中?字段类型是什么?DateTime似乎错了.我不想将00:54:12的时间存储为1901-01-01 00:54:12这看起来有点差吗?

c# database datetime timespan

6
推荐指数
1
解决办法
2881
查看次数

如何将DbType.Time的Datareader结果转换为Timespan对象?

我正在使用带有DAAB 4.0框架的c#从一个MS SQL 2008数据库中读取一个结果,该数据库的列类型为dbtype.time,来自datareader.

我的问题是MSDN文档说dbtype.time应该映射到一个时间跨度但是我看​​到的唯一接近时间跨度的接近构造函数接受一个long,并且从datareader返回的结果不能转换为long,或者直接转换为时间跨度.

我发现这篇文章显示了datareader.getTimeSpan()方法,但daab 4.0中的datareader似乎没有这个方法.

那么如何将结果从datareader转换为timepan对象?

c# time timespan data-access daab

6
推荐指数
2
解决办法
1万
查看次数

如何应对RoundSpain-TimeSpan?

我取两个DateTime字段之间的区别,并将其存储在TimeSpan变量中,现在我必须通过以下规则来舍入TimeSpan:

如果TimeSpan中的分钟数小于30,则必须将分钟和秒设置为零,
如果TimeSpan中的分钟数等于或大于30,则小时数必须增加1,分钟数和秒数必须设置为零.

TimeSpan也可以是负值,所以在这种情况下我需要保留符号..

如果TimeSpan不是负值,我可以达到要求,虽然我已经编写了一个代码,我对它的低效率感到不满意,因为它更笨重.

请建议我一种更简单有效的方法.

感谢和问候,

这是我的代码,当TimeSpan不是负值时工作正常.

TimeSpan time_span = endTime.Subtract(startTime);
            TimeSpan time_span1;
            if (time_span.Minutes >= 30)
            {
                time_span1 = new TimeSpan(time_span.Hours + 1, 0, 0);
            }
            else
            {
                time_span1 = new TimeSpan(time_span.Hours, 0, 0);
            }
Run Code Online (Sandbox Code Playgroud)

time_span1将包含结果..

.net c# datetime timespan

6
推荐指数
1
解决办法
9607
查看次数

查询最大并发时间跨度数

我有一个带有两个日期时间字段(CnxStartdatetime,CnxEnddatetime)的SQL Server表.每行代表信息的传输. 我试图找到基于这两个时间戳的最大并发传输数.我有一个工作查询,但它既缓慢又非常麻烦.我知道必须有一个更好的方法来解决这个问题,但不能提出任何问题.

对于当前版本,如果我以5"级别"运行并获得结果,我必须返回并添加大量SQL来测试是否存在6个并发传输的实例,等等.一旦查询获得7-8"级别"它变得非常慢.

当前版本的片段:

select 
    t1.id, t2.id, t3.id, t4.id, t5.id, t6.id, t7.id, t8.id, t9.id, t10.id

FROM
dbo.MyTable t1, dbo.MyTable t2, dbo.MyTable t3, dbo.MyTable t4, dbo.MyTable t5,
dbo.MyTable t6, dbo.MyTable t7, dbo.MyTable t8, dbo.MyTable t9, dbo.MyTable t10
WHERE
(((t2.cnxstartdatetime >= t1.cnxstartdatetime) and (t2.cnxstartdatetime <= t1.cnxenddatetime))
or ((t2.cnxenddatetime >= t1.cnxstartdatetime) and (t2.cnxenddatetime <= t1.cnxenddatetime)))
AND
t2.id != t1.id
AND
(((t3.cnxstartdatetime >= t2.cnxstartdatetime) and (t3.cnxstartdatetime >= t1.cnxstartdatetime)and (t3.cnxstartdatetime <= t1.cnxenddatetime) and (t3.cnxstartdatetime <= t2.cnxenddatetime))
or ((t3.cnxenddatetime >= …
Run Code Online (Sandbox Code Playgroud)

sql sql-server datetime timespan

6
推荐指数
1
解决办法
3993
查看次数

解决TimeSpan 24:00解析的问题

我在TimeSpan类中遇到一个小问题,它可以解析23:59而不是24:00.

当然,客户想要在24:00输入以表示当天结束而不是23:59或00:00,因为00:00表示当天的开始.

目前我的代码解析结束时间如下:

if ( !TimeSpan.TryParse( ( gvr.FindControl( "txtTimeOff" ) as TextBox ).Text, out tsTimeOff ) )
{
   this.ShowValidationError( String.Format( "Please enter a valid 'Time Off' on row '{0}'.", gvr.RowIndex + 1 ) );
   return false;
}
Run Code Online (Sandbox Code Playgroud)

对于这种情况,最好的解决办法是什么?

编辑:(解决方案1)

if ( ( gvr.FindControl( "txtTimeOff" ) as TextBox ).Text == "24:00" )
{
    tsTimeOff = new TimeSpan( 24, 0, 0 );
}
else
{
    if ( !TimeSpan.TryParse( ( gvr.FindControl( "txtTimeOff" ) as TextBox ).Text, out tsTimeOff ) )
    {
         this.ShowValidationError(
            String.Format( …
Run Code Online (Sandbox Code Playgroud)

c# timespan

6
推荐指数
2
解决办法
7695
查看次数

32位和64位Windows之间的日期时间粒度

我已经为一些网络调试创建了一个小工程应用程序.它需要一个IP地址列表并对其进行ping操作,并设置用户设置的超时和速率.它记录了平均往返时间,每当其中一个发送失败时,它会记录它的失败持续时间和发生时间的时间戳...

这就是主意.我是在带有.Net4的Win7机器上开发的,并且不得不把它放在一套XP笔记本电脑上.

问题是测试期间我的盒子上的持续时间值显示了漂亮的ms持续时间,在XP盒子上,当我看起来它们显示0或15.625(幻数?)...并且在字符串中有滑稽的方框,符号?

    public void LinkUp()
    {
        if (_isLinkUp) return;

        _upTime = DateTime.Now;
        var span = _upTime.Subtract(_downTime);
        _downTimeLog.Add(new LinkDown()
                            {
                                _span = span,
                                _status = _ipStatus,
                                _time = _downTime
                            });
        _isLinkUp = true;
    }
Run Code Online (Sandbox Code Playgroud)

这就是日志的作用._ipStatus是ping失败原因(通常是超时).

    _downEventLog.AppendLine("  Duration-> " + linkDownLogEvent._span.TotalMilliseconds + "ms\n");
Run Code Online (Sandbox Code Playgroud)

这就是印刷品的一点......任何人都可以对这种明显的差异有所了解吗?

问题已经得到解答,但我会在这里添加一个编辑以获取更多信息.

编辑:

似乎差异不是Win7和WinXP的差异,而是32位和64位.

Henk指出的32位Windows系统中,系统时钟的粒度为15-16ms,这对于时间跨度小于16ms的每个值都给出了15.625的值.

在64位系统中,系统调用是针对具有更精细粒度的不同方法集.所以在x64的开发机器上,我的系统时钟精度为ms!

现在,秒表通过处理器仪器使用硬件接口来记录更精细的粒度(可能不是每个处理器滴答,但我想象一些与这种想法一致的极其准确的东西).如果操作系统下的硬件没有这种级别的检测,则会使用系统时间.所以要小心!但我猜大多数现代台式机/笔记本电脑都有这种仪器......嵌入式设备或那种性质的东西可能没有,但就我所见,秒表类不在Compact Framework中(这里你必须使用QueryPerformanceCounter( )).

希望这一切都有帮助.这对我帮助很大.

在_spanStopWatch初始化器周围的某处:

    if (!_spanStopWatch.IsHighResolution)
    {
        throw new ThisMachineIsNotAccurateEnoughForMyLikingException("Find a better machine.");
    }
Run Code Online (Sandbox Code Playgroud)

螺母和螺栓:

    public void LinkUp()
    {
        if (_isLinkUp) return;

        _spanStopWatch.Stop();
        var span = _spanStopWatch.Elapsed;
        _downTimeLog.Add(new LinkDown() …
Run Code Online (Sandbox Code Playgroud)

c# datetime timespan x86-64 stopwatch

6
推荐指数
1
解决办法
1057
查看次数

范围之间的随机日期时间 - 不统一输出

我实现了下面的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)

c# random datetime timespan

6
推荐指数
1
解决办法
2万
查看次数

TimeSpan到自定义字符串,如HH:mm:ss

我想转换

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.

在此输入图像描述 任何线索?

.net c# timespan time-format

6
推荐指数
2
解决办法
1万
查看次数

仅将分钟转换为小时

我正试图解决这个问题:

我有很多分钟,我想把它们转换成几小时,当我尝试时TimeSpan,它总是显示几天和几小时.

我的示例代码:

double minutes = 2000 ;
TimeSpan hours = TimeSpan.FromMinutes(minutes);
label1.Text = hours.ToString(@"hh\:mm");
Run Code Online (Sandbox Code Playgroud)

输出结果是 09:20, 但我希望这个结果33:20

如何转换分钟以获得确切的小时数?

c# timespan

6
推荐指数
2
解决办法
1262
查看次数

如何将时区偏移文本“+01:00”转换为时间跨度

我有一个 API,它将接受时区偏移量作为字符串。我需要将时区转换为 TimeSpan 并将时间跨度与我拥有的 UTC 数据相加。这就是我正在尝试的。

private bool TryGetHrAndMinFromTimeZone(string timeZone, out TimeSpan result)
    {
        try
        {
            var isPositive = !timeZone.StartsWith("-");
            var hrAndMin = string.Concat(timeZone.Where(x => x != '-' && x != '+')).Split(':');
            var hr = int.Parse(hrAndMin[0]);
            var min = int.Parse(hrAndMin[1]);
            result = isPositive ? new TimeSpan(hr, min, 0) : new TimeSpan(-hr, -min, 0);
            return true;
        }
        catch (Exception)
        {
            throw new Exception(string.Format("Provided TimeZone '{0}' is Invalid ", timeZone));
        }
    }
Run Code Online (Sandbox Code Playgroud)

有更好的选择吗?

c# timezone timespan

6
推荐指数
1
解决办法
1953
查看次数