2012-05-15 19 views
1

我有一個帶日曆擴展器的文本框。DateTime.Parse或Convert.ToDateTime不起作用

的格式應該是這樣的:

<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

你可以使用DateTime.ParseExact和/或通過明確地文化:

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

編輯:如果您在動態變化的文化並將其存儲在會話,這應該工作:

var userCulture = new System.Globalization.CultureInfo((string)Session["Language"]); 
DateTime result = DateTime.Parse(TxtVehicleDestructionDateReturnedVehicle.Text, userCulture); 
+0

請參閱更新1 –

+0

@LuisEValencia:請參閱我的更新。 –

4

您應該在解析時添加格式器。將DateFormat鍵添加到您的web.config將不會自行執行任何操作。

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

在所有情況下,最好使用TryParse來處理任何格式錯誤。

-1
Date date = new Date(location.getTime()); 
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); 
mTimeText.setText("Time: " + dateFormat.format(date)) 
+0

'android.text.format',真的嗎? –

+0

請注意,問題是由c#,asp.net和ajax標記的。提供答案時,您可能會錯誤地分類問題。 – RThomas

1

解決方案是調整您的IIS上的文化屬性,如果您託管您的網站,或者您在本地工作,您應該解析日期時使用以下代碼:

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

如果這對您有用,您可以將此文化設置爲您的母版頁上的默認值。

另一種解決方案是分裂的日期文字和把每splited部分轉化成其根據日期部分像這樣的實例在此日期「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])); 
1

嘗試使用

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

DateTime.Parse(TxtVehicleDestructionDateReturnedVehicle.Text , Appsettings.DateFormat,null); 
+0

請注意,它不是DateTime.Parse,它的Convert.ToDateTime(...) –