2013-08-23 145 views
1

我在将Kendo的时间选取器的值保存为24小时制格式时出现问题,Timepicker显示"HH:mm tt"格式,但我想将它转换为"HH:mm:ss",我使用时间范围来放置我的drowdown名单Timepicker保存12小时至24小时格式

示例代码

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 

回答

3

不能分析它作为一个TimeSpan它是否有一个AM/PM指示。你可以使用:

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:00”。另外请注意我是如何使用局部变量作为中间值的 - 我建议不要反复设置相同的属性(client.EndTime),这会在调试时导致混淆。

(顺便说一句,你还可以用我的Noda Time库本,其中有一个单独的LocalTime型,哪个更合适这里你没有一个日期。我不会建议它只是这种情况下,但如果你在应用程序中做其他日期/时间工作,你可能会发现它很有用。)

+0

谢谢先生,但我有错误在client.EndTime = parsed.ToString(“HH:mm:ss” ,CultureInfo.InvariantCulture); 不能转换源类型“字符串”为目标类型“System.TimeSpan” @乔恩飞碟双向 –

+0

其实client.EndTime是这里的时间跨度先生 –

+1

@EnriqueGil:然后在你原来的问题的代码是没有意义的,因为你”在第二行重新分配一个字符串给'client.EndTime'。你说你想把值转换为'HH:mm:ss'的格式 - 如果你只是想要一个'TimeSpan',那再次没有意义。如果你*真的*只想要一个'TimeSpan',请使用我的第一行,然后使用'TimeOfDay'属性。就个人而言,我不喜欢在一天中的某个时间使用'TimeSpan',但这是另一回事。 –

相关问题