2012-05-15 1 views
1

J'ai une zone de texte avec un extendeur de calendrier.DateTime.Parse ou Convert.ToDateTime ne fonctionne pas

Le format devrait ressembler à ceci:

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

Je suit sur mon balisage 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%>" /> 

Lorsque je tente de l'utiliser dans une propriété comme celui-ci:

datett= DateTime.Parse(txt.Text), 

Il dit FormatException.

J'ai débogué et essayé aussi Convert.ToDatetime, même exception élevée.

Le texte que je teste est 30/05/2015

qui, selon mon format dans mon web.config devrait fonctionner correctement.

Update1 J'utilise le code suivant pour changer la langue et la culture de ma page basée sur la sélection de l'utilisateur, c'est peut-être la raison pour laquelle son échec,

Je vois beaucoup de réponses, la 2ème question serait, comment pour obtenir la culture actuelle?

/// <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; 
      } 
     } 

Répondre

4

Vous pouvez utiliser DateTime.ParseExact et/ou de transmettre la culture explicite:

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

Modifier: Si vous modifiez dynamiquement la culture et le stockage en session, cela devrait fonctionner:

+0

pls voir mise à jour 1 –

+0

@LuisEValencia: Voir ma mise à jour. –

4

Vous devez ajouter le formateur lors de l'analyse. L'ajout de la clé DateFormat à votre web.config ne fera rien par lui-même.

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

Dans tous les cas, il est préférable d'utiliser TryParse pour gérer les erreurs de formatage.

-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' ', vraiment? –

+0

Notez que la question est pour C#, asp.net et ajax comme indiqué par ses balises. Vous avez peut-être mal classé la question lorsque vous fournissez votre réponse. – RThomas

1

La solution consiste à ajuster la propriété de culture sur votre IIS si vous hébergez votre site Web dessus, ou si vous travaillez localement vous devriez utilisez le code suivant lors de l'analyse date:

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

Si cela a fonctionné pour vous, vous pouvez définir cette culture comme valeur par défaut sur votre page principale.

Une autre solution consiste à scinder le texte de la date et de mettre chaque partie dans DIVISEES cela fait partie de la date en fonction comme ceci par exemple pour cette date « 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

Essayez d'utiliser

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

ou

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

S'il vous plaît noter que ce n'est pas DateTime.Parse, son Convert.ToDateTime (...) –