1

我想将字符串解析为时间,字符串可以是“hh:mm tt”或“hh:mmtt”“11:00am”、“11:00am”、“13:00”“5:00AM”“6 :00PM" , "6:00 pm", "6:00:01 pm" 等等。我想知道如何正确解析它。我的想法是枚举所有格式,如下所示。但我觉得这很尴尬,必须有更好的方法。谢谢

        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;
4

2 回答 2

2

不是真正的答案,但不适合评论:拒绝不完全清楚的值,而不是可能猜错。

虽然很容易猜测特定字符串代表什么实际值,但这是非常危险的路线。您接受的输入“格式”越多,猜错值的可能性就越高。

如果数据来自某些计算机生成的来源 - 简单地拒绝意外数据可能是最佳选择。考虑是否要求一些固定的众所周知的文化不敏感格式有效(即 ISO8601 可选时区)

如果此数据直接来自用户,最好立即拒绝数据并让用户以更精确的格式重新输入日期。如果可能的话 - 只是不要让用户选择和强制特定格式。

如果您随机错误地猜测值,用户(如果他们关心并且必须经常使用您的工具)将学习以一种非常特殊的格式输入值并口头指示仅使用该格式(例如“小时两个空格冒号分钟,仅添加 PM下午的值")...

请注意,只有某些文化(在 .Net 意义上)具有 AM/PM 指示符,因此请确保也针对这些文化测试您的代码。

于 2013-04-09T23:55:05.517 回答
1

DateTime.TryParse似乎可以解决您的问题。看一看

string myTime = "5:00AM";
DateTime dt = DateTime.Now;
DateTime.TryParse(ss, out dt);
于 2013-04-09T22:31:36.543 回答