在C#中将格式错误的字符串转换为DateTime格式

时间:2012-10-03 17:13:27

标签: c# string datetime

我有以下字符串:

Updated: 15:14 03/10

我希望将其转换为datetime格式,以便将其插入sql server中的datetime字段。

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);

这有更清洁/更有效的方法吗?

2 个答案:

答案 0 :(得分: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 如果您想获得厚颜无耻,可以在格式字符串中包含“已更新”部分。但它有点难看,因为你需要转义字符dt:

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);

答案 1 :(得分: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指定各种选项。