TimeSpan 没有得到正确的剩余时间

TimeSpan not getting the correct remaining time

我有这条线:

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

如果本地容器中的 nextSpinUnlockTime 存储 11/08/2015 10:54:23 并且 spinTimeStarted 存储 11/08/2015 07:54:23 为什么 duration 以毫秒为单位存储-800?

有没有人明白哪里出了问题..

我只调试了那一行,在那一行duration的毫秒等于-800

更新

我有这个(我忘记提及和添加的内容):

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

我已经调试过,出现负毫秒的原因是因为它没有按预期增加 3 小时。有谁明白为什么?

尝试使用 DateTime.Subtract():

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

您可能需要查看 duration.TotalMilliseconds

DateTime 的默认 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));

问题一定出在 Convert.ToDateTime 调用中。我在你的例子中看不到任何毫秒。为什么不尝试向 convert 方法提供有关您的文化的一些详细信息?

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

在我的头撞桌子很长时间后,我尝试了:

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

然而,它的工作,我不能更快乐!

谢谢大家!