2017-04-10 18 views
0

我在做一些DateTime減法操作時遇到了一些麻煩,我從MySQL數據庫收到了一些時間。所有非UTC時間都是美式格式。使用從數據庫檢索到的DateTime進行減法給出奇怪的結果

這是我收到的時候,它是在一個字符串的形式(我使用on Rails的Ruby的應用程序的數據庫檢索):

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 = 2017年4月10日12:46: 26日上午,當我跑這個代碼最後):

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 

我是如何處理從數據庫中獲取的時間的?無論我嘗試什麼,我都無法得到正常的結果。

+0

不知道這是否會有所幫助,但我無法重現您的問題。我: 「十四時13分34秒」 http://prntscr.com/eujzg1 – NielW

+0

我無法2017-04-10T15重現該問題:00:00.000Z爲起始日期,以便別的東西在玩。數據庫中是否存在此字段的空值? 的-736428.00結果:46:22.2744445裝置736428天46個MINUES和22.27秒...或更精確地使用運行代碼01/01/0001 12:00 AM和DateTime.Now之間差(4/10/2017 12:46 AM)。 – James

回答

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); 

同樣,也不清楚爲什麼這是發生了什麼,但我已經解決了/有問題的解決方法了。如果有人知道爲什麼這個錯誤首先發生,請讓我知道!

謝謝大家對您的輸入!

0

我在小提琴手中用相同的輸入和語法試了一下,我得到了預期的結果。檢查Debug.Log內部如何處理TimeSpan對象。在將它傳遞給Debug.Log之前,還要嘗試打印這些值(小時/分鐘/秒之間的差異),以檢查它是否報告正確的結果。

enter image description here