你只需要確保您的格式匹配你的輸入,你提供的任何輸入格式都沒有。
查看custom dateformat specifiers和文字字符如何與您的輸入對齊。
Your input: 20161216000000.000000-000
format specifiers: yyyyMMddhhmmss.ffffff-000
使這一格式,以你的方法,你會得到這樣的:
// 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
}
我從櫻桃採摘Custom Date and Time Format Strings所需的自定義格式值。
請注意,我只是返回創建的DateTime實例。你會看到我爲什麼這麼做。因爲你想在Winform上顯示DateTime(我假設在一個文本框中,但標籤也可以工作),現在可以簡單地將DateTime實例綁定到文本框,並讓數據綁定管道進行格式化。這裏是可以在LinqPad運行的代碼示例:
// 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();
我使用的Add
的超負荷接受一個格式字符串的DataBindingsCollection。然後,我可以使用相同的自定義格式說明符選項來表示該DateTime實例,但是我想要的。從這裏可以很容易地添加另一個使用相同的DateTime實例但在文本中顯示月份的文本框。
當這一切走到一起,這將是你的結果:
看起來它也包含時間信息。首先,我會嘗試檢查'TryParse'是否已經可以處理它(沒有確切的部分)。對不起,我不能爲你查找它。如果沒有,你可以很容易地只是子串字符串:DateTime.TryParseExact(strDate.Substring(0,8),「yyyyMMdd」,System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None,out dtm) ;' – musefan