我在12小时时钟机器上将DataTime转换为时间时遇到问题。以下代码在24小时时钟机器上正常工作。
(new DisplayReminder(_name, _displayText, _snoozTime, TimeSpan.Parse(_startTime.ToShortTimeString(), CultureInfo.InvariantCulture))).Show();
TimeSpan.Parse(_startTime.ToShortTimeString()
抛出异常输入字符串格式不正确,这里我试图从DateTime值_startDate
获取时间部分
关于这个问题的任何建议或解决方案。
答案 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,您可以在此之后使用相同的先前代码 第二次编辑 这是最可怕的解决方案,但它有效;)