我想在两个给定日期之间计算TimeSpan
,倒计时到0天。我有以下代码:
partial void mExpiration_Compute(ref string result)
{
DateTime a = mExpiryDate.AddMonths(-1);
DateTime b = mExpiryDate;
TimeSpan ts = b.Subtract(a);
// Difference in days.
int c = ts.Days;
result = Convert.ToString(c);
}
如果TimeSpan
目前是31,那么我希望减少余额时间。示例:“您有24天的到期日期。”注意:余额减少为(31,30,..,24等)
如何在给定日期之间倒计时。
答案 0 :(得分:0)
您的函数永远不会返回任何其他31,因为您计算相对于到期日期恰好一个月的剩余天数(即函数始终计算02/09/215
和{{之间的天数1}},因此总是返回一个常量值。)
假设您的02/08/2015
持续存在但未发生变化,我就会计算剩余的天数(相对于当前日期):
mExpiryDate
答案 1 :(得分:0)
我认为你错过了一个参数。这就是你需要的:
<ContextMenu x:Key="MyContextMenu" DataContext="{Binding Source={StaticResource MyBindingProxy}, Path=Data}" ItemsSource="{Binding ContextMenuMap}" DisplayMemberPath="Header">
<ContextMenu.Resources>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding Command}" />
</Style>
</ContextMenu.Resources>
</ContextMenu>
答案 2 :(得分:0)
在不知道表单逻辑的情况下,我猜问题是否存在有效期。
如果存在,请检索它;如果没有,请从今天开始创建并添加一个月。
然后计算到期日。
它会像这样(独立代码,根据您的应用程序调整):
// Choose either setting 1. or 2. for mExpiryDate.
// Here setting 1. is active:
// 1. Simulate expiry date already set on August 17th.
DateTime mExpiryDate = new DateTime(2015, 9, 17);
// 2. Expiry date not set.
//DateTime mExpiryDate = DateTime.Today.AddMonths(1);
TimeSpan ts = mExpiryDate.Subtract(DateTime.Today);
// Difference in days.
int c = ts.Days;
string result = Convert.ToString(c);
这将于2015-09-01这一天返回16。
答案 3 :(得分:0)
这是给定日期之间倒计时的解决方案。
partial void mExpiration_Compute(ref string result)
{
DateTime expStart = mExpiryDate.AddMonths(-1);
DateTime expDate = mExpiryDate;
DateTime currentDate = DateTime.Now;
// Difference in days, hours, and minutes.
TimeSpan expSpanGivenDates = expDate.Subtract(expStart);
TimeSpan expSpanDateNow = expDate.Subtract(currentDate);
// Difference in days
int numGivenDays = expSpanGivenDates.Days;
int numNowDays = expSpanDateNow.Days;
int calculateDays = numGivenDays - (numGivenDays - numNowDays);
int days = 0;
if (calculateDays >= 0 && calculateDays < 31)
{
days = calculateDays;
}
result = Convert.ToString(days);
}
它将返回两个给定日期之间剩余的天数。到期前后将为0。
输出为:0 0 31 24 8 9 0 0 0 .....
答案 4 :(得分:-1)
这很好用!
public TimeSpan ElapsedTimeFormatted
{
get
{
if (FinishedOn != null &&
StartedAt != null)
{
TimeSpan durationCount = new TimeSpan();
int hours = 0;
int minutes = 0;
int seconds = 0;
var times = Segments.Select(c => c.ElapsedTimeFormatted).ToList();
foreach (var time in times)
{
TimeSpan timeParse = TimeSpan.Parse(time);
hours = hours + (int)timeParse.Hours;
minutes = minutes + (int)timeParse.Minutes;
seconds = seconds + (int)timeParse.Seconds;
durationCount = new TimeSpan(hours, minutes, seconds);
}
return durationCount;
}
return new TimeSpan();
}
}