0

我有以下字符串:

Updated: 15:14 03/10

我希望将其转换为日期时间格式,以便将其插入到 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);

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

4

2 回答 2

5

您可以使用DateTime.ParseExact正确的格式字符串。像这样的东西:

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);
于 2012-10-03T17:15:54.177 回答
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.

于 2012-10-03T17:17:04.483 回答