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();
然而,它的工作,我不能更快乐!
谢谢大家!
我有这条线:
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();
然而,它的工作,我不能更快乐!
谢谢大家!