【问题标题】:How to find the exact time left如何找到确切的剩余时间
【发布时间】:2014-06-02 02:28:37
【问题描述】:

我正在开发提醒应用程序,我采用了两个属性,一个是日期时间格式的日期,另一个是字符串类型的时间。我的问题是我无法获得确切的小时数和分钟数秒当用户设置未来日期的提醒时,如何用当前时间减去他未来的时间,这样我就可以得到准确的小时数和分钟数和秒数。请帮帮我

谢谢 这是我的模型类

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

  }

} 这是我的用户界面,我必须显示剩余时间

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

【问题讨论】:

  • 'Date' 不是一个好的属性名称。此外 SetProperty() 似乎是一种方法,其唯一任务是设置私有变量。为什么?。除此之外,我不知道你在问什么......
  • 所以现在您已经编辑并删除了 SetProperty()。不是一开始就不需要吗?
  • 是的先生,基本上需要通知我已经创建了另一个实现 INotifyPropertyChanged 接口的类,所以每当我必须通知模型类中的属性时,这个类都会帮助我,我使用 SetProperty 方法。
  • 不是一个答案,但是......约会被认为是一天中的一个时间,参考了约会所在的时间和地点或约会使用的时间和地点的现行时区和夏令时规则约会调度程序。 DateTimeOffset 类型接近满足这些要求。

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


【解决方案1】:

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

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 即属性“应该被视为智能字段”,更不用说Principle of Least Surprise

此外,您没有返回 TimeSpan(用于描述两个日期之间的间隔的有据可查的类型),而是强制客户使用您自己的有限方法来获取相同的数据。

相反,请考虑:

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

并让客户端根据需要使用生成的TimeSpan

【讨论】:

    猜你喜欢
    • 2021-10-26
    • 2013-01-22
    • 2011-04-11
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多