输入字符串格式不正确无法解析为DateTime

时间:2013-12-17 09:48:49

标签: c# winforms parsing datetime

我在12小时时钟机器上将DataTime转换为时间时遇到问题。以下代码在24小时时钟机器上正常工作。

(new DisplayReminder(_name, _displayText, _snoozTime, TimeSpan.Parse(_startTime.ToShortTimeString(), CultureInfo.InvariantCulture))).Show();

TimeSpan.Parse(_startTime.ToShortTimeString()抛出异常输入字符串格式不正确,这里我试图从DateTime值_startDate获取时间部分 关于这个问题的任何建议或解决方案。

4 个答案:

答案 0 :(得分:3)

目前还不清楚你要做什么,但只是获取时间不应该涉及字符串转换:

TimeSpan time = _stateTime.TimeOfDay;

我强烈建议您避免使用字符串转换,除非它们本身是您要实现的目标的一部分。

我个人不喜欢使用TimeSpan作为一天中的时间,但那是你的BCL。您可能还想查看我的Noda Time库,它可以更清楚地分离各种日期/时间概念。

答案 1 :(得分:1)

试试这个:

TimeSpan.ParseExact(
         _startTime.ToString("hh:mm:ss"), "hh:mm:ss",
                          System.Globalization.CultureInfo.InvariantCulture);

它会将您的日期格式设置为与TimeSpan.ParseExact接受的格式相同,因此它将在任何计算机上运行(我假设_startTime为DateTime

答案 2 :(得分:1)

尝试

startTime.TimeOfDay.ToString()

答案 3 :(得分:0)

我很确定它在24小时工作正常但在12H系统中崩溃,因为“PM”“AM”部分!摆脱它你会安全的 11:54:33 PM和23:54:33在处理方面非常不同

修改 它可能不是最好的解决方案,但是如果你剪切字符串的最后一个索引就可以了:

    int index = _StartTime.IndexOf("M");
    if (index >= 0) 
{
_StartTime = _StartTime.Substring(0, index-1);
switch (_StartTime.IndexOf("P"))
case : -1
 _StartTime = _StartTime.Substring(0,_StartTime.Length);
 break;

default:
 string hours = _startTime.Substring(_StartTime.Length-8,2);
 int H = Convert.ToInt32(hours);
 H += 12;
 string result = _StartTime.Substring(0, _StartTime.Length-8)+ Convert.ToString(H)+_startTime.Substring(_StartTime.Length-6);

_StartTime = result;
break;
}

这将抛出AM / PM,您可以在此之后使用相同的先前代码 第二次编辑 这是最可怕的解决方案,但它有效;)