1

我有一个带有日历扩展器的文本框。

格式应该是这样的:

<add key="DateFormat" value="dd/MM/yyyy"/>

我的 aspx 标记上有以下内容

  <asp:TextBox ID="txt" runat="server" 
                        meta:resourcekey="txt" MaxLength="150" HtmlEncode="False"></asp:TextBox>
                        <ajaxToolkit:CalendarExtender runat="server"
                            TargetControlID="txt"
                                            PopupButtonID="Image1" Format="<%$Appsettings:DateFormat%>" />

当我尝试在这样的属性中使用它时:

datett= DateTime.Parse(txt.Text),

它说 FormatException。

我调试并尝试了 Convert.ToDatetime,引发了同样的异常。

我正在测试的文本是 30/05/2015

根据我在 web.config 中的格式应该可以正常工作。

update1 我使用以下代码根据用户选择更改页面的语言和文化,也许这就是它失败的原因,

我看到很多答案,第二个问题是,如何获得当前的文化?

/// <summary>
        /// Handles the AcquireRequestState event of the Application control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        protected void Application_AcquireRequestState(object sender, EventArgs e)
        {
            //Create culture info object 
            /*var ci = new CultureInfo(Session["Language"].ToString());
            System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
            System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);*/

            System.Web.UI.Page p = (System.Web.HttpContext.Current.Handler as System.Web.UI.Page);
            if (p != null)
            {
                p.UICulture = p.Culture = new CultureInfo((string)Session["Language"]).Name;
            }
        }
4

5 回答 5

4

您应该在解析时添加格式化程序。将 DateFormat 键添加到您的 web.config 不会自行执行任何操作。

VehicleDesctructionDate = DateTime.Parse(TxtVehicleDestructionDateReturnedVehicle.Text , /* put formatter here */,null);

在所有情况下,最好使用 TryParse 来处理任何格式错误。

于 2012-05-15T08:51:07.243 回答
4

您可以DateTime.ParseExact明确地使用和/或传递文化:

var enCulture = new System.Globalization.CultureInfo("en-us");
DateTime result = DateTime.ParseExact("30/05/2015", 
                                      "dd/MM/yyyy", 
                                       enCulture );

编辑:如果您正在动态更改文化并将其存储在 Session 中,这应该有效:

var userCulture = new System.Globalization.CultureInfo((string)Session["Language"]);
DateTime result = DateTime.Parse(TxtVehicleDestructionDateReturnedVehicle.Text, userCulture );
于 2012-05-15T08:53:57.230 回答
1

解决方案是调整 IIS 上的文化属性,如果您在其上托管网站,或者如果您在本地工作,则在解析日期时应使用以下代码:

DateTime.Parse(date,new CultureInfo("en-GB",false));

如果这对您有用,您可以将此文化设置为母版页上的默认设置。

另一种解决方案是拆分日期文本并将每个拆分部分放入它的相应日期部分,例如对于这个日期“30/05/2015”:

        string x = "30/05/2015";
    DateTime dt = new DateTime(int.Parse(x.Split('/')[2]), int.Parse(x.Split('/')[1]), int.Parse(x.Split('/')[0]));
于 2012-05-15T08:57:01.443 回答
1

尝试使用

Convert.ToDateTime(TxtVehicleDestructionDateReturnedVehicle.Text, CultureInfo.GetCultureInfo("en-GB"));

或者

DateTime.Parse(TxtVehicleDestructionDateReturnedVehicle.Text , Appsettings.DateFormat,null);
于 2012-05-15T09:03:50.093 回答
-1
Date date = new Date(location.getTime());
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date))
于 2012-05-15T08:53:45.047 回答