2015-11-06 97 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);