我有以下字符串:
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);
这有更清洁/更有效的方法吗?
答案 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 如果您想获得厚颜无耻,可以在格式字符串中包含“已更新”部分。但它有点难看,因为你需要转义字符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);
答案 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
指定各种选项。