桌面应用程序的日期时间格式与Win10兼容

时间:2019-05-16 07:16:26

标签: c# wpf datetime

我有一个WPF应用程序,并且正在使用MVVM框架。 在我的视图模型中,我有一个日期时间设置器,用于检查变量的值是否已更改,如果是,则将新值设置为变量。

我的问题是,每次进入设置器时,日期时间的值是否正确?

例如:日期时间值为2019年1月11日

初始设定值等于2019年1月11日,但在随后的运行中它变为2019年11月1日-在下一次运行中返回2019年1月11日,依此类推。

由于setter函数中的无限循环,因此导致StackMemoryException。

我尝试添加if语句来检查id的旧值和新值是否相同,但是问题是setter的值始终从1月切换到11月。

我尝试将日期解析为相同的日期格式。

public DateTime? ActionDate
{
    get { return actionDate; }
    set
    {
       if (value.HasValue && !actionDate.HasValue)
       {
            actionDate = value;
            OnPropertyChanged("ActionDate");
       }
       else if (value.HasValue && actionDate.HasValue && actionDate.Value.Date.ToString("MM/dd/yyyy") != value.Value.Date.ToString("MM/dd/yyyy"))
        {
            actionDate = value;
            OnPropertyChanged("ActionDate");
         }
      }
}

我还尝试在使用Windows 7 OS的计算机上运行该应用程序,并且可以正常运行。任何建议都会有所帮助。

谢谢

2 个答案:

答案 0 :(得分:0)

我认为您的问题来自您的字符串格式。

https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings

  //For the date January 11, 2019, 
  actionDate.Value.Date.ToString("MM/dd/yyyy")
  this will return November 1, 2019. 

  dd => day
  MM => month
  yyyy => year 
  HH => hour (24 hours)
  hh => hour (12 hours)
  mm => minute
  ss => second
  here is an exemple for January 11, 2019

  //you can use 

  actionDate.Value.Date.ToString("dd/MM/yyyy");
  //or
  string.Format("{0:dd-MM-yyyy}", actionDate.Value.Date); // => 11-01-2019

答案 1 :(得分:0)

我认为您所显示的显示格式需要更正。 至于设置值,如果值与先前设置的值不同。您可以使用以下逻辑:-

public DateTime? ActionDate
    {
    get { return actionDate; }
    set
    {
    if (value.HasValue && value.CompareTo(actionDate)!=0)
        actionDate = value;
   OnPropertyChanged("ActionDate");
    }