2015-11-06 58 views
1

我有這樣一行:時間跨度沒有得到正確的剩餘時間

TimeSpan duration = 
     Convert.ToDateTime(localSettings.Containers["userInfo"].Values["nextSpinUnlockTime"]) 
    - Convert.ToDateTime(localSettings.Containers["userInfo"].Values["spinTimeStarted"]); 

如果nextSpinUnlockTime當地的容器存儲中2015年11月8日10點54分23秒和spinTimeStarted店2015年11月8日07: 54:23爲什麼duration以毫秒爲單位存儲-800?

有誰知道什麼是錯的..

我只有調試線,並在該行的duration毫秒等於-800

UPDATE

我有這個(我的東西忘了提及添加):

localSettings.Containers["userInfo"].Values["nextSpinUnlockTime"] = Convert.ToDateTime(localSettings.Containers["userInfo"].Values["spinTimeStarted"]).AddHours(3).ToString(); 

我調試過了, e減毫秒是因爲它沒有按預期增加3小時。有誰明白爲什麼?

+0

爲什麼你有兩種不同的格式日期? –

+1

你有沒有_really_檢查返回的'DateTime'值?例如;將它們分配給不同的變量並查看它們的確切值。 –

+0

@RonBeyer這只是爲了解決不同國家的分歧 – KTOV

回答

0

經過很長的拍打我的頭靠在桌子的時候,我想:

DateTime newDate = currentDateAndTime.AddHours(3); 

它想出了正確的結果,因爲它增加了產生額外的3個小時,我就知道DateTime對象一成不變的,但我不明白,因爲我沒有例如分配值回currentDateAndTime爲什麼它不工作:

currentDateAndTime = currentDateAndTime.AddHours(3); 

相反,我在做什麼:

localSettings.Containers["userInfo"].Values["nextSpinUnlockTime"] = Convert.ToDateTime(localSettings.Containers["userInfo"].Values["spinTimeStarted"]).AddHours(3).ToString(); 

但是,它的工作,我不能更快樂!

謝謝你們!

-2

嘗試使用DateTime.Subtract()

TimeSpan duration = Convert.ToDateTime(localSettings.Containers["userInfo"].Values["nextSpinUnlockTime"]).Subtract(Convert.ToDateTime(localSettings.Containers["userInfo"].Values["spinTimeStarted"])); 

而且你可能要檢查DateTimeduration.TotalMilliseconds

+1

'DateTime.Subtract'和'operator - (DateTime,DateTime)'會給出相同的結果。 – juharr

+0

是的,但要排除(實際上不應該是這樣)一個重載操作符,不妨使用預期的'.Subtract(DateTime)'函數。儘管如此,我仍然堅持'.TotalMilliseconds'部分。他提到'.Milliseconds'存儲'-800'時他正在尋找3個小時,但我還沒有看到任何提及他正在研究'.Hours'或'.TotalHours'屬性。 – gmiley

+0

基於日期時間-800對於TotalMilliseconds和Milliseconds都是錯誤的,所以儘管知道差異很重要,但我認真地懷疑它與根本問題有任何關係。 – juharr

0

默認ToString()方法提出了價值高達

DateTime sample = new DateTime(2015, 11, 6, 15, 14, 13, 123); 

    // 06.11.2015 15:14:13 
    // Note 123 (milliseconds) absence 
    Console.Write(sample.ToString()); 

    // To check value up to millisecond use ".fff" Format 
    // 06.11.2015 03:14:13.123 
    Console.Write(sample.ToString("dd.MM.yyyy hh:mm:ss.fff")); 

所以在你的情況,兩個值都有毫秒,但它們不是打印出來:

DateTime first = new DateTime(2015, 11, 8, 10, 54, 23, 900); 
    DateTime second = new DateTime(2015, 11, 8, 10, 54, 23, 100); 

    TimeSpan duration = second - first; 

    // The output: 
    // 08.11.2015 10:54:23 <- default ToString() - up to seconds 
    // 08.11.2015 10:54:23 <- default ToString() - up to seconds 
    // -00:00:00.8000000 
    Console.Write(String.Join(Environment.NewLine, first, second, duration)); 
+0

謝謝你的擡頭。不幸的是不是答案 – KTOV

0

的問題必須在Convert.ToDateTime通話。我的例子中看不到任何毫秒。你爲什麼不嘗試向轉換方法提供一些關於你的文化的細節?

CultureInfo culture = new CultureInfo("en-GB"); 
var start = Convert.ToDateTime("11/08/2015 10:54:23", culture);