2017-06-02 10 views
0

Hier versuche ich Datum in systemspezifisches Format zu konvertieren, aber tryparse exact funktioniert nicht kann nicht Datum in angegebenes Dateformat konvertieren kann mir jemand sagen, wie man das erreicht!Parsing Datetime zu spezifizierten Datetime-Format in C#

public partial class HomePage : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     labl.Text = Form1("12/05/2017"); 
    } 
protected void UpdateButton_Click(object sender, EventArgs e) 
{ 

} 
private string Form1(string date) 
{ 
    // Get the Current System culture. 
    CultureInfo ci = CultureInfo.CurrentCulture; 
    DateTimeFormatInfo dtfi = ci.DateTimeFormat; 

    string[] SystemDateTimePatterns = new string[250]; 
    int i = 0; 
    foreach (string name in dtfi.GetAllDateTimePatterns('d')) 
    { 
     SystemDateTimePatterns[i] = name; 
     i++; 
    } 
    string date1 = "asd"; 
    string[] myDateTimeFormat = { "MM-dd-yyyy", "MM/dd/yyyy", "yyyy-dd-MM", "MM/dd/yyyy HH:mm:ss", "dd-MM-yyyy", "dd/MM/yyyy", "yyyy-MM-dd", "dd/MM/yyyy HH:mm:ss" }; 
    foreach (string dateFormat in myDateTimeFormat) 
    { 
     if (dateFormat == (SystemDateTimePatterns[0])) 
     { 
      SqlParameter StartingDateParam; 
      DateTime mdate; 
      if (DateTime.TryParseExact(date, dateFormat, CultureInfo.CurrentCulture, DateTimeStyles.None, out mdate)) 
      { 
       StartingDateParam = new SqlParameter("@startingdate", SqlDbType.DateTime); 
       StartingDateParam.Value = mdate; 
       date1 = StartingDateParam.Value.ToString(); 
      } 
     } 

    } 
    return date1; 
} 
} 
+0

Sie wollen einfach '05.12/2017' auf ein Datum analysieren? Warum so viel Code? Ist das "Monat/Tag/Jahr" oder "Tag/Monat/Jahr"? – Jamiec

+0

TryParseExact hat eine Überladung, die ein Array von Formaten erfordert. All dieser Code ist nicht notwendig – Steve

+0

@jamiec seine dd/MM/JJJJ und so viel Code, weil convert.toDatetime oder tryParse nicht auf der Produktionsseite arbeitet, deshalb mache ich dies – abhishek

Antwort

0

Ihr Code ist eine Größenordnung komplexer als es sein muss. Ihre Eingabe ist 12/05/2017 und Sie erklären dies ist day/month/year Format:

var input = "12/05/2017`; 
DateTime date = DateTime.Now; 
var parsed = DateTime.TryParseExact(input,"dd/MM/yyyy",CultureInfo.CurrentCulture, DateTimeStyles.None,out date); 

anschauliches Beispiel: http://rextester.com/OSFV37546

+0

hier Sie das Format angeben, warum Sie in der Lage sind, das genaue Format anzugeben, aber zur Laufzeit oder in der Produktion Sie nicht wissen, welches Format es ist und daher wird es scheitern – abhishek

+1

@abhishek Wenn Sie nicht wissen, was das Format ist, dann haben Sie größere Probleme - Ihre Beispieleingabe ist das perfekte Beispiel für ein mehrdeutiges Datum. Sie * müssen * die Eingabe und das erwartete Format kennen. Zumindest müssen Sie eines auswählen, um es zuerst zu versuchen. – Jamiec

+0

aber ich kenne das Systemformat, also kann ich jedes Eingabedatum konvertieren? – abhishek