我想解析字符串到时间,字符串可以是“hh:mm tt”或“hh:mmtt” “上午11:00”,“上午11:00”,“13:00”“上午5:00”“下午6:00”,“下午6:00”,“下午6:00:01”等 我想知道如何正确解析它。我的想法是枚举下面的所有格式。 但我觉得这很尴尬,必须有更好的方法。谢谢
DateTime ret = DateTime.MinValue;
DateTime.TryParse(timeStr, CURRENT_CULTURE_FORMATPROVIDER,Style1, out ret);
if(ret == DateTime.MinValue)
{
DateTime.TryParse(timeStr,CURRENT_CULTURE_FORMATPROVIDER,Style2, out ret);
}
if(ret == DateTime.MinValue)
{
DateTime.TryParse(timeStr,CURRENT_CULTURE_FORMATPROVIDER,Style3, out ret);
}
...
return ret;
答案 0 :(得分:2)
不是真正的答案,但不适合评论:拒绝不完全清楚的值,而不是可能猜错。
虽然猜测特定字符串代表的实际值是非常诱人的,但这是非常危险的路线。猜测价值错误的可能性是您接受的更多输入“格式”。
如果数据来自某些计算机生成的源 - 只是拒绝意外数据可能是最佳选择。考虑是否要求一些固定的众所周知的文化不敏感格式(即ISO8601可选择带时区)
如果这些数据直接来自用户,最好立即拒绝数据并让用户以更精确的格式重新输入日期。如果可能 - 只是不要让用户选择并强制使用特定格式。
如果您错误地随机猜测值(如果他们关心并且必须经常使用您的工具)将学习以一种非常特殊的格式键入值并且只有使用该语言的口头指示(例如“小时两个空格冒号分钟,仅在下午添加PM的值“)......
请注意,只有一些文化(在.Net意义上)具有AM / PM指示符,因此请确保对照这些代码进行测试。
答案 1 :(得分:1)
DateTime.TryParse似乎正在解决您的问题。看看
string myTime = "5:00AM";
DateTime dt = DateTime.Now;
DateTime.TryParse(ss, out dt);