Sie nur Ihr Format, um sicherzustellen, benötigten Entsprach Ihrer Eingabe, die keines Ihrer bereitgestellten Eingabeformate tat.
Sehen Sie, wie die custom dateformat specifiers und Literal-Zeichen mit Ihrer Eingabe Line-up.
Your input: 20161216000000.000000-000
format specifiers: yyyyMMddhhmmss.ffffff-000
dieses Format auf Ihre Methode bringen Sie diese bekommen:
// takes an object, returns a DateTime or null in case of failure
DateTime FormatDateTime(object ObjInstallDate)
{
DateTime dtm;
if (!DateTime.TryParseExact(
(string) ObjInstallDate, // notice that we don't hassle with the input here,
// only cast to a string
// we simply rely on the parser of DateTimer.TryParseExact
"yyyyMMddhhmmss.ffffff-000", // this matches the format
// if the -000 represents a timezone
// you can use z00 or zz0
// don't use zzz as that expects -0:00
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out dtm))
{
// an invalid date was supplied, maybe throw, at least log
Console.WriteLine("{0} is not valid", ObjInstallDate);
}
// we either return here null or a valid date
return dtm; // !! No ToString() here
}
I Kirsche Wert nahm die benötigte benutzerdefinierte Format von Custom Date and Time Format Strings.
Beachten Sie, dass ich die DateTime-Instanz, die erstellt wurde, einfach zurückgeben. Du wirst als nächstes sehen, warum ich das mache.
Da Sie die DateTime auf einem WinForm anzeigen möchten (ich nehme an, in einem Textfeld, aber ein Etikett funktioniert auch) können Sie einfach die DateTime-Instanz in das Textfeld Databind und lassen Sie die Datenbindung die Formatierung tun. Hier ist ein Codebeispiel, das in LinqPad ausgeführt werden kann:
// take a string and make a date of it
var str = "20161216000000.000000-000";
DateTime dtm = FormatDateTime(str);
// show it on a Databind TextBox
var f = new Form();
var txt = new TextBox();
txt.Width = 200;
// bind the Text property
txt.DataBindings.Add(
"Text", // property on the textbox
dtm, // our DateTime object
null, // use the DateTime instance, not a property
true, // use formatting
DataSourceUpdateMode.OnValidation,
null, // value to indicate null
"yyyy-MM-dd"); // our format
f.Controls.Add(txt);
f.Show();
Ich bin mit der Überlastung des Add
auf dem DataBindingsCollection, die einen Format-String nimmt. Ich kann dann dieselben benutzerdefinierten Formatbezeichneroptionen verwenden, um diese DateTime-Instanz so darzustellen, wie ich möchte. Von hier aus wäre es einfach, eine andere TextBox hinzuzufügen, die dieselbe DateTime-Instanz verwendet, aber den Monat zum Beispiel in Text anzeigt.
Wenn all dies kommt zusammen wird dies Ihr Ergebnis sein:
Es sieht aus wie es auch Zeitinformationen enthält. Zuerst würde ich versuchen zu überprüfen, ob 'TryParse' schon damit umgehen kann (ohne den genauen Teil). Tut mir leid, ich kann mich nicht darum kümmern, es für dich zu suchen. Wenn nicht, können Sie einfach das gewünschte Bit einfach unterteilen: 'DateTime.TryParseExact (strDate.Substring (0, 8)," yyyyMMdd ", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dtm) ; ' – musefan