我在将Kendo的时间选择器的值保存为24小时格式时出现问题,Timepicker显示"HH:mm tt"
格式,但我想将其转换为"HH:mm:ss"
,我使用时间跨度为我的下拉列表
示例代码
String clientShiftId = formCollection["clientShiftId"];
String clientId = formCollection["clientId"];
String dateShift = formCollection["dllShiftDay"];
String startTime = formCollection["txtStartTime"];
String endTime = formCollection["txtEndTime"];
var stayHere = formCollection["stayHere"];
Client_Customer_Position_Shift clientCusPosShift = new Client_Customer_Position_Shift();
try
{
if (String.IsNullOrWhiteSpace(clientShiftId) || clientShiftId == "0")
{
client.Client_Customer_PositionID = Convert.ToInt32(clientId);
clientCusPosShift.Day_LookID = Convert.ToInt32(dateShift);
DateTime parsed = DateTime.ParseExact(endTime.Trim(), "hh:mm tt",CultureInfo.InvariantCulture);
client.EndTime = parsed.ToString("HH:mm:ss", CultureInfo.InvariantCulture); <------- Line of Error
DateTime parse = DateTime.ParseExact(startTime.Trim(), "hh:mm tt",CultureInfo.InvariantCulture);
client.StartTime = parse.ToString("HH:mm:ss", CultureInfo.InvariantCulture); <------- Line of Error
答案 0 :(得分:3)
如果它有AM / PM指示符,则无法将其解析为TimeSpan
。你可以使用:
DateTime parsed = DateTime.ParseExact(endTime.Trim(), "hh:mm tt",
CultureInfo.InvariantCulture);
// If you need a string
client.EndTime = parsed.ToString("HH:mm:ss", CultureInfo.InvariantCulture);
// If you just need a TimeSpan
client.EndTime = parsed.TimeOfDay;
我假设你获得的价值总是 在不变文化中?您还应该考虑使用DateTime.TryParseExact
代替ParseExact
,以便更清晰地检测无效输入。
顺便说一下,在解析时注意“hh”而不是“HH” - 你将在晚上11点收到“晚上11点”而不是“晚上23点”。还要注意我如何使用局部变量作为中间值 - 我建议不要重复设置相同的属性(client.EndTime
),这可能会在调试时导致混淆。
(顺便说一下,你也可以使用我的Noda Time库,它有一个单独的LocalTime
类型,这里更合适,因为你没有约会。我不会建议只是这种情况,但是如果你在应用程序中进行其他日期/时间工作,你会发现它很有用。)