当前位置: 首页 > 知识库问答 >
问题:

绑定到DateTime的DatePicker。“字符串未被识别为有效的日期时间”

朱运诚
2023-03-14

(免责声明:这个异常已经在许多其他线程中报告过了,是的,我已经搜索了一下,试图找到解决我这个问题的方法!!)

我有一个WPF应用程序,其中WPF Toolkit DatePicker控件绑定到DateTime变量

<UserControl x:Class="MikesApp.View.UserControls.FXRatesUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:toolkit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit">

 <toolkit:DatePicker x:Name="fxDate" VerticalAlignment="Center" 
         Text="{Binding Selected_FXRate_Date, Mode=TwoWay}" 
         Style="{DynamicResource DatePickerStyle1}" >
 </toolkit:DatePicker>

每当我输入日期(如4/20/2012)时,DatePicker控件似乎认为它实际上是英国日期格式(DD/MM/YYYY),并且WPFtoolkit源代码抛出“String未被识别为有效的日期时间”的异常。

这突然阻止了WPF对应用程序的其他部分执行更改通知的任何机会,这些部分需要知道该日期何时更改。

VS2010异常截图

我很困惑。

我的笔记本电脑设置为以mm/dd/yyyy的形式显示日期,我特别尝试告诉我的应用程序使用这种美国日期格式,首先使用以下代码:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "MMM-dd-yyyy";
Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern = "MMM-dd-yyyy  hh:mm:ss";   

然后,出于绝望,使用以下代码:

CultureInfo ci = new CultureInfo("en-US");
ci.DateTimeFormat.SetAllDateTimePatterns(new string[] { "MM/dd/yyyy" }, 'd' );
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;

但是不管我怎么做,DatePicker都会抛出一个异常,只要我选择了一个不能使用dd/mmm/yyyy解析的日期。

如果我看一下引发异常的代码行(摘自WPF Toolkit SDK中的datepicker.cs),它是:

newSelectedDate = DateTime.Parse(text, DateTimeHelper.GetDateFormat(DateTimeHelper.GetCulture(this)));

...我发现“dateTimeHelper.getCulture(this)”确实正确地返回了“en-美国”,但是GetDateFormat函数得到了错误的日期格式。它以某种方式返回dd/mm/yyyy,而不是mm/dd/yyyy。

GetDateFormat的返回值

为什么WPFtoolkit代码与使用它的WPF应用程序代码具有不同的区域性?

如何使WPFtoolkit使用正确的区域性?

共有1个答案

刘永望
2023-03-14

我知道这不是一个直接的答案,但以防万一它可能会有所帮助,你有访问telerik工具吗?它们的RadDateTimePicker具有区域性依赖项属性(类型为CultureInfo),您可以设置/强制该属性:

<telerik:RadDateTimePicker x:Name="fxDate" VerticalAlignment="Center" 
     Culture ="{Binding Culture}"
     Text="{Binding Selected_FXRate_Date, Mode=TwoWay}" 
     Style="{DynamicResource DatePickerStyle1}" >

另外,我很确定您会说“当然不是”,但以防万一,您是否在DatePickerStyle1中重写模板,这可能会取消TemplateBinding?

 类似资料:
  • 我正在尝试从角获取数据并使用C#通过WebAPI将其保存在数据库中。现在我在转换DOB时遇到问题,我得到了这个错误 “字符串未被识别为有效的datetime” 角度日期格式:“Wed Jan 05 2022 00:00:00 GMT 0530(印度标准时间)” 数据库日期格式:“YYYY-MM-DD” 现在需要转换成这种格式。

  • 问题内容: 我从API收到日期字符串,其格式为。 我目前正在使用正则表达式来验证字符串格式,这种方法可以正常工作,但是我可以看到某些情况,根据字符串,它可能是正确的格式,但实际上是无效的日期。即,例如。 PHP中是否有更好的方法来接收诸如这样的字符串,并确定该日期是否为该格式的有效日期? 问题答案: 您可以为此目的使用类: 测试用例:

  • 我从API接收一个日期字符串,它的格式为。 我目前正在使用正则表达式来验证字符串格式,它工作正常,但是我可以看到一些情况,根据字符串,它可能是正确的格式,但实际上是无效的日期。 在PHP中有没有更好的方法来获取字符串,例如,并判断它是否是格式的有效日期?

  • 问题内容: 如何将类似“ 01-Jan-1995”的字符串解析为Python对象? 问题答案: 总体来说,您可以使用或模块中的函数来分析日期和时间字符串。您的示例可以解析为: 请注意,解析月份的名称是与语言环境相关的。下表显示了用于解析日期和时间的各种格式的指令。

  • 问题内容: 使用或在JavaScript中使用时,我不能只传递任意日期格式。根据格式的不同,我得到的日期可能会不同,甚至会得到日期对象。某些日期格式只能在一种浏览器中使用,而不能在其他浏览器中使用。那么我应该使用哪种日期时间格式? 其他问题: 所有浏览器都支持相同格式吗?Mozilla Firefox,Google Chrome,Microsoft Internet Explorer,Micros

  • 问题内容: 我有一堆记录,日期格式为字符串,例如“ 04/17/2009” 我想将它们转换为mysql datetime字段 我计划使用foreach循环读取旧的日期值,并将新格式化的值插入每个记录的新字段中 什么是转换字符串的最佳方法…我认为php可能有一种自动执行此方法的方法? 谢谢 问题答案: 首先,将字符串转换为时间戳: 然后做一个