两个日期时间之间的差异
本文关键字:之间 时间 日期 两个 | 更新日期: 2023-09-27 18:35:28
我有一个日期时间,我想显示从DateTime.Now
到接收日期时间的区别并绑定它。结果应该是这样的:
1d 15h 13m 7s
最好的方法是什么? StringFormat
? IValueConverter
?
我建议使用Timespans ToString
方法和自定义TimeSpan格式字符串
如果您还不知道,时间跨度是为测量这样的时间间隔而设计的,可以通过从一个日期中减去另一个日期来方便地获得。
var startDate = new DateTime(2013,1,21);
var currentDate = DateTime.Now;
TimeSpan interval = currentDate - startDate;
string intervalInWords = String.Format("{0:%d} days {0:%h} hours {0:%m} minutes {0:%s} seconds", interval);
Console.WriteLine(intervalInWords);
这将打印出类似
267天 10 小时 45 分 21 秒
正如评论中指出的那样,因为这些日期时间可能位于不同的时区/夏令时,因此使用此技术时应非常小心。如果可行的话,对两者使用全年一致的UTCtime应该就足够了。通常,最好的策略通常是将所有日期时间与时区/偏移量(如果需要)一起保存为 UTC,然后在显示的特定时区偏移量中需要它们。
使用 TimeSpan
例:
DateTime oldDate = new DateTime(2002,7,15);
DateTime newDate = DateTime.Now;
// Difference in days, hours, and minutes.
TimeSpan ts = newDate - oldDate;
// Difference in days.
int differenceInDays = ts.Days;
现在您可以根据需要进行更改。
从格式的角度来看,其他答案是正确的,但只是为了解决 WPF 角度,我猜您想更新标签/文本框,以便它不断包含准确的持续时间?
如果是这样,您可以使用计时器和调度程序执行此操作。
定时器代码:
//duration in milliseconds, 1000 is 1 second
var timer = new Timer(1000);
timer.Elapsed += timer_Elapsed;
timer.Start();
计时器已用代码:
//this is set elsewhere
private readonly DateTime _received;
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Application.Current.Dispatcher.Invoke(
DispatcherPriority.Normal,
new Action(()
=> //replace label1 with the name of the control you wish to update
label1.Content =
string.Format("{0:%d} days {0:%h} hours {0:%m} minutes {0:%s} seconds"
, (DateTime.Now - _received))));
}
你可以使用TimeSpan,也可以注意[这里][1]
[1]:以小时为单位显示两个日期时间值之间的差异,我建议您通过TimeSpan。
DateTime startDate = Convert.ToDateTime(2008,8,2);
DateTime endDate = Convert.ToDateTime(2008,8,3);
TimeSpan duration = startDate - endDate;
创建一个属性,如 DateProp 类型为 DateTime,你将绑定到 XAML 上,并假设你的属性是Other_date_here,像这样初始化它:
DateProp = DateTime.Now.Subtract(Other_date_here);
最后,在 XAML 上,绑定它并设置格式,如下所示:
text="{绑定日期,字符串格式=d 天 H 小时 m 分钟 s 秒}"
(或您喜欢的任何其他格式:)。