首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >程序中的负毫秒数

程序中的负毫秒数
EN

Stack Overflow用户
提问于 2018-06-03 02:51:19
回答 1查看 925关注 0票数 0
代码语言:javascript
复制
      //Global variables
bool pause;

        TextView ClickToStart;
        TextView ClickAsSoonAsPossible;
        TextView Tries;
        TextView TriesCount;
        TextView AverageMs;
        TextView AverageMsCount;
        Button ScreenClickButton;
        System.Timers.Timer timer1;
        Color currentColor = Color.White;
        Random rnd = new Random();
        DateTime startTime1;
        DateTime endTime1;
        int secondsToFormat;

        int ClicksCount = 0;



  private void Timer1_Elapsed(object sender, ElapsedEventArgs e)
                {
                    RunOnUiThread(() =>
                    {
                        Toast.MakeText(this, "Timer", ToastLength.Short).Show();
                        currentColor = Color.Green;
                        ScreenClickButton.SetBackgroundColor(currentColor);
                    });
                    timer1.Stop();
                    startTime1 = DateTime.Now;
                }


            private void ClickCount(object sender, EventArgs e)
            {
                if (currentColor == Color.White)
                {

                    currentColor = Color.Red;
                    ScreenClickButton.SetBackgroundColor(currentColor);
                    int seconds = rnd.Next(1, 5);
                    Toast.MakeText(this, "Seconds:" + seconds, ToastLength.Short).Show();
                    timer1.Interval = seconds * 1000;
                    timer1.Start();

                }
                else if (currentColor == Color.Green)
                {
                    endTime1 = DateTime.Now;
                    ClicksCount++;

                    secondsToFormat =endTime1.Millisecond - startTime1.Millisecond;

     AverageMsCount.Text = secondsToFormat.ToString();

                   // if(secondsToFormat>=1000)
                 //   {
                 //       AverageMs.Text = ((endTime1 - startTime1).Milliseconds).ToString();
                 //   }

                    currentColor = Color.White;
                    ScreenClickButton.SetBackgroundColor(currentColor);
                }
                else if (currentColor == Color.Red)
                {

                    currentColor = Color.White;
                    ScreenClickButton.SetBackgroundColor(currentColor);
                }


                //Toast.MakeText(this, "You clicked me " + ClicksCount + "times", ToastLength.Short).Show();
                if (ClicksCount == 1)

                    AverageMsCount.Text = secondsToFormat.ToString();
                TriesCount.Text = "1";

                if (ClicksCount == 2)
                {
                    secondsToFormat = secondsToFormat / 2;
                    AverageMsCount.Text = secondsToFormat.ToString();

                    TriesCount.Text = "2";

                }
                if (ClicksCount == 3)
                {
                    secondsToFormat = secondsToFormat / 3;
                    AverageMsCount.Text = secondsToFormat.ToString();
                    TriesCount.Text = "3";
                }
                if (ClicksCount == 4)
                {
                    secondsToFormat = secondsToFormat / 4;
                    AverageMsCount.Text = secondsToFormat.ToString();
                    TriesCount.Text = "4";

                }

                if (ClicksCount == 5)
                {
                    secondsToFormat = secondsToFormat / 5;
                    AverageMsCount.Text = secondsToFormat.ToString();
                    TriesCount.Text = "5";
                }


                if (Click`enter code here`sCount == 6)
                {
                    ClicksCount = 1;

                }



            }

大家好,我正试着在Android Xamarin上做这样的事情:https://www.humanbenchmark.com/tests/reactiontime/。因此,在第一次单击后,毫秒的返回值为负值,如-525。在一些点击之后,它变得越来越高,直到最后是正数。有人能解释一下为什么它是阴性的吗?计时器流逝基本上是绿色屏幕弹出的随机time.After,它弹出,我的毫秒计数开始。当点击绿色按钮,它就完成了。我真的很感谢任何人的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 02:56:34

这就是问题:

代码语言:javascript
复制
secondsToFormat = endTime1.Millisecond - startTime1.Millisecond;

Millisecond属性是“秒内的毫秒”。假设我们有:

代码语言:javascript
复制
startTime1 = 2018-06-02T18:52:30.750Z 
endTime1 = 2018-06-02T18:52:31.100Z

..。这将得到-650ms的结果,因为startTime1.Millisecond是100,而endTime1.Millisecond是750。

理想情况下:

  • 为此根本不要使用DateTime:使用Stopwatch,您可以在想要开始计时时重置并启动它,然后在想要了解经过了多少时间时使用Elapsed属性来获取TimeSpan。使用该TimeSpanTotalMilliseconds属性来确定经过了多少毫秒。(或者,使用Stopwatch.ElapsedMilliseconds.)
  • If您必须继续使用DateTime
    • 使用DateTime.UtcNow而不是DateTime.Now,这样,如果您的用户在时区偏移更改边界上运行此命令(例如,用于夏令时),您就不会得到奇怪的结果
    • 将两个值之间的差值作为TimeSpan,例如endTime1 - startTime1,然后再次使用<代码>D25

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50660122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档