使用从数据库中检索的DateTime进行减法,得到奇怪的结果

时间:2017-04-10 04:51:38

标签: c# mysql datetime unity3d utc

我在使用从MySQL数据库收到的时间做一些DateTime减法时遇到了一些麻烦。所有非UTC时间都采用美国格式。

这是我收到的时间(我使用Ruby on Rails应用程序从数据库中检索它),它以字符串的形式出现:

2017-04-10T15:00:00.000Z

然后我解析字符串以将其转换为DateTime并对常规DateTime进行调试(没有偏移量):

start_time = DateTimeOffset.Parse(event_time[2]);
Debug.Log(start_time.DateTime);

然后显示以下内容:

4/10/2017 3:00:00 PM

这看起来类似于我通常使用的格式(即M / dd / yyy h / mm / ss tt),因此我会与当前时间进行快速比较,以确切地检查我与它的距离(供参考) ,DateTime.Now = 4/10/2017 12:46:26 AM我最后运行此代码时:)

TimeSpan tmp;
tmp = (start_time.DateTime).Subtract(DateTime.Now);

Debug.Log(tmp)

然而,这给了我以下结果:

-736428.00:46:22.2744445

使用以下操作进行此类操作可以得到正常结果:

DateTime tmp2;
TimeSpan tmp3;

tmp2 = DateTime.Now.Add(new TimeSpan(0, 0, 360));

tmp3 = tmp2.Subtract(DateTime.Now)

Debug.Log(tmp2);
Debug.Log(tmp3);

正常结果:

4/10/2017 12:52:26 AM
00:06:00

我如何处理从数据库中获取的时间有什么问题吗?无论我尝试什么,我似乎无法得到正常的结果。

2 个答案:

答案 0 :(得分:0)

我用fiddler尝试了相同的输入和语法,我得到了预期的结果。检查Debug.Log如何在内部处理TimeSpan对象。还要尝试在将值传递给Debug.Log之前打印值(小时/分钟/秒的差异),以检查它是否报告正确的结果。

enter image description here

答案 1 :(得分:0)

我找到了解决问题的方法(有点?)。

我也必须道歉,因为我没有完全描述我如何使用我最初发布的代码。

事实证明问题在于我是在尝试在另一个脚本中执行DateTime减法(我在Unity中执行此操作,就像我之前提到的那样)。

例如,这是代码在Buttonscript.cs脚本中给出了错误的输出:

TimeSpan tmpButtonController;
tmpButtonController = HighscoreController.GetComponent<HSController>().start_time.DateTime.Subtract(DateTime.Now);
Debug.Log(tmpButtonController);

但是如果我做同样的事情,但在我解析字符串的同一个脚本(HSController.cs)中,一切都很好:

  TimeSpan tmpHSController;

  tmpHSController = start_time.DateTime.Subtract(DateTime.Now);

  Debug.Log(tmpHSController);

同样,不确定为什么会发生这种情况,但我现在已经解决/解决了这个问题。如果有人知道为什么首先发生这个错误,请告诉我!

感谢大家的投入!