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

时间:2015-11-06 14:54:05

标签: c# timespan

我有这一行:

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个小时。有谁理解为什么?

4 个答案:

答案 0 :(得分:0)

ToString()的默认DateTime方法将值设置为

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

答案 1 :(得分:0)

问题必须出在Convert.ToDateTime调用中。我的示例中看不到任何毫秒。为什么不尝试向转换方法提供有关您的文化的一些细节?

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

答案 2 :(得分: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();

然而,它正在发挥作用,我感到无比快乐!

谢谢你们!

答案 3 :(得分:-2)

尝试使用DateTime.Subtract()

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

您可能需要查看duration.TotalMilliseconds