【问题标题】:WPF datepicker control to save in dd-mm-yyyy formatWPF 日期选择器控件以 dd-mm-yyyy 格式保存
【发布时间】:2019-02-12 14:15:04
【问题描述】:

在我的 wpf 应用程序中,我使用 datepicker 控件来选择日期,如下所示:

<DatePicker Name="dtpSales" Grid.Row="3" SelectedDate="{Binding SalesDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, TargetNullValue ={x:Static System:DateTime.Now}}" Width="200" Height="24" HorizontalAlignment="Left" Margin="147,7,0,5" BorderBrush="Black" Grid.ColumnSpan="2" />

我能够以 mm-dd-yyyy 格式保存日期。我如何以 25-05-2019 格式保存它???绑定的 SalesDate 是 DateTime 数据类型。

已编辑:我有一个值为 12-02-2019 (dd-MM-yyyy) 的日期对象,它作为 2019-12-02 (yyyy-dd-MM) 保存到 sql server 表中。当我从数据库中检索日期时,日期的值为 02-12-2019 (MM-dd-yyyy)。现在我想在那个日期上再加 4 个月。

        int salesid = (int)dr["SalesID"]; // dr is the datarow
        DateTime salesdate = (DateTime)dr["SalesDate"];
        string sdate = salesdate.AddMonths(4).ToString("dd-MM-yyyy");
        DateTime servicedate = Convert.ToDateTime(sdate); // 2020-12-02

当我将 4 个月添加到 02-12-2019 时,它将变为 2020-12-02 ??? 当我将 4 个月添加到 02-12-2019 时,我无法获得正确的日期。

【问题讨论】:

  • 保存到哪里? DateTime 对象没有特定格式。
  • DateTime 对象没有格式;他们的string 表示可以。如果可能,通常最好将其保存为DateTime。是否要将其保存为字符串?
  • 我已经更新了问题
  • @Kuttan:为什么不把日期保存为 SQL Server 中的日期...?

标签: c# wpf datepicker


【解决方案1】:

已编辑:从 cmets 看来,您的数据库已经返回了 DateTime 对象。以下应该足够了:

int salesid = (int)dr["SalesID"]; // dr is the datarow
DateTime salesdate = (DateTime)dr["SalesDate"];
DateTime servicedate = salesdate.AddMonths(4); // 2020-12-02

(感谢 Chris Dunaway 提出改进建议)

【讨论】:

  • 在这一行抛出错误 DateTime salesdate = Convert.ToDateTime(DateTime.ParseExact(dr["SalesDate"].ToString(), "MM-dd-yyyy", CultureInfo.InvariantCulture));错误提示“字符串未被识别为有效的日期时间”
  • 您的数据库到底返回了什么?我已经使用以下字符串对此进行了测试:"02-12-2019" 并且这有效
  • 数据库返回 02-12-2019。但是行 DateTime salesdate = Convert.ToDateTime(DateTime.ParseExact(dr["SalesDate"], "MM-dd-yyyy", CultureInfo.InvariantCulture));抛出错误,它说数据行的数据格式无效。所以我将 .ToString() 添加到 dr["SalesDate"]。它再次抛出异常。
  • DateTime 转换为string,然后再转换回DateTime 是没有意义的。为什么不直接做DateTime servicedate = salesdate.AddMonths(4);
  • 如果你的说法是dr["SalesDate"] 等于调试器中的"02-12-2019" 当它到达该行时,那么我不确定问题出在哪里尝试将这一行粘贴到直接传递日期的位置作为字符串并运行它只是为了确保您的调试器正常工作:DateTime salesdate = Convert.ToDateTime(DateTime.ParseExact("02-12-2019", "MM-dd-yyyy", CultureInfo.InvariantCulture));
猜你喜欢
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 2014-07-06
  • 2023-03-04
  • 1970-01-01
  • 2012-02-14
  • 2012-05-25
相关资源
最近更新 更多