2012-10-03 46 views
0

我有以下字符串:轉換不佳組成的字符串,以DateTime格式在C#

Updated: 15:14 03/10 

我希望將它轉換爲datetime格式,以便將其插入到SQL Server中的日期時間字段。

string date = 'Updated: 15:14 03/10'; 
    string updatedTime = date.Split(' ')[0]; 
    string updatedDate = date.Split(' ')[1]; 
    string updatedMonth = updatedDate.Split('/')[1]; 
    string updatedDay = updatedDate.Split('/')[0]; 
    string updatedYear = DateTime.UtcNow.Year.ToString(); 
    string updated = updatedYear + '-' + updatedMonth + '-' + updatedDay + ' ' + updatedTime; 
DateTime dt = Convert.ToDateTime(updated); 

這是否有更清潔/更有效的方法呢?

回答

5

您可以使用DateTime.ParseExact和正確的format string。事情是這樣的:

string date = "Updated: 15:14 03/10"; 
string modifiedDate = date.Replace("Updated: ", ""); 
string format = "HH:mm dd/MM"; 
DateTime parsedDate = DateTime.ParseExact(modifiedDate, format, CultureInfo.CurrentCulture); 

編輯其實,你並不需要一年格式字符串; DateTime解析器足夠智能以承擔當前年份。

編輯#2如果您想獲得厚顏無恥,可以在格式字符串中包含「已更新」部分。這有點難看,因爲你需要轉義字符d,t:

string date = "Updated: 15:14 03/10"; 
string format = @"Up\da\te\d\: HH:mm dd/MM"; 
DateTime parsedDate = DateTime.ParseExact(date, format, CultureInfo.CurrentCulture); 
+0

+1:擊敗我吧。 – zimdanen

+0

謝謝dbaseman&jon。非常感激。 – Gravy

3

這是總是形成?如果是這樣,它看起來像你應該能夠做到:

string trimmed = text.Substring("Updated: ".Length); 
DateTime dateTime = DateTime.ParseExact(trimmed, "HH:mm dd/MM", 
             CultureInfo.InvariantCulture); 

這可能是因爲這將工作過,但我還沒有嘗試過:

DateTime dateTime = DateTime.ParseExact(text, "'Updated: 'HH:mm dd/MM", 
             CultureInfo.InvariantCulture); 

目前尚不清楚是否是順便預期結果是本地或UTC,您可以通過DateTimeStyles指定各種選項。

+0

謝謝dbaseman&jon。非常感激。 – Gravy