如何找到剩下的确切时间

时间:2014-06-02 02:28:38

标签: c# xaml windows-phone-7 windows-phone-8

我正在处理提醒应用程序,我有两个属性,一个是Datetime格式的日期,另一个是字符串类型的时间。我的问题是我无法得到确切的小时和分钟当用户为未来日期设置提醒时,如何用当前时间减去未来时间,以便我可以获得精确的小时,​​分​​钟和秒。请帮帮我

谢谢你 这是我的模型类

 private DateTime _date=DateTime.Today.Date;
    public DateTime Date
    {
        get { return _date; }
        set
        {
                TimeSpan tp = value - DateTime.Now;
                if (tp.TotalDays>0)
                {
                    RemainingDays = (int)tp.TotalDays;
                    //TimeSpan ts = value- System.TimeSpan.FromHours(Time);
                    //string.Format("{0}:{1}", System.Math.Truncate(ts.TotalHours).ToString(), ts.Minutes.ToString());

                    RemainingHours = (int)tp.TotalHours;

                    RemainingMin = (int)tp.Minutes;
                    RemainingSec = (int)tp.Seconds;
                    SetProperty(ref _date, value);
                }

        }

    }

    private string _time = DateTime.Now.TimeOfDay.ToString();
    public string Time
    {
        get { return _time; }
        set
        { SetProperty(ref _time, value); }
    }

    private int _remainingdays;
    public int RemainingDays
    {
        get { return _remainingdays; }
        set
        {

            SetProperty(ref _remainingdays, value);
        }

    }

    private int _remaininghours;
    public int RemainingHours
    {
        get { return _remaininghours; }
        set
        {

            SetProperty(ref _remaininghours, value);
        }

    }

    private int _remainingmin;
    public int RemainingMin
    {
        get { return _remainingmin; }
        set
        {

            SetProperty(ref _remainingmin, value);
        }

    }

    private int _remainingsec;
    public int RemainingSec
    {
        get { return _remainingsec; }
        set
        {
            SetProperty(ref _remainingsec, value);
        }
    }

  }

} 这是我的UI,我必须显示剩下的时间

  <StackPanel  Orientation="Horizontal" Height="60" HorizontalAlignment="Center" >

                                <TextBlock x:Name="tbkRemaningTime" FontSize="50"  >
                                <Run Text="{Binding RemainingHours}"/>
                                <Run Text=":"/>
                                <Run Text="{Binding RemainingMin}"/>
                                <Run Text=":"/>
                                <Run Text="{Binding RemainingSec}"/>
                                </TextBlock>
                            </StackPanel>

1 个答案:

答案 0 :(得分:0)

让我们后退一步。您正以非常传统的方式使用属性设置器。考虑编写此代码的客户端:

var y = new YourObject();
Console.WriteLine(y.Date); // prints today's date
y.Date = new DateTime(2015,1,1);
Console.WriteLine(y.Date); // still prints today's date  (?!)  

设置y.Date根本没有改变y.Date!它改变了其他几个领域/属性。这违反了核心property design principle,属性&#34;应被视为智能字段&#34;,更不用说Principle of Least Surprise

此外,您不是返回TimeSpan - 一个记录良好的类型来描述两个日期之间的间隔 - 而是强迫客户端使用您自己的有限方法来获取相同的数据。

相反,请考虑:

class YourObject
{
    public DateTime Date {get; set;}
    public TimeSpan TimeUntilDate
    {
        get {return Date - DateTime.Now;}
    }
}

让客户端根据需要使用结果TimeSpan