如何验证“日期和时间”字符串是否只有时间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何验证“日期和时间”字符串是否只有时间?相关的知识,希望对你有一定的参考价值。

我有一个字符串变量存储可能是完整日期或部分日期:

1)完整日期:12/12/2010 12:33 AM

2)部分日期:上午12:33(仅限日期字段)

我正在试图找出解析字符串的最佳方法,以确定字符串是否缺少日期字符串。原因是,在我的代码中,如果缺少日期,我将在字符串中附加一个默认日期(例如1/1/1900)。请记住,时间可能是各种格式。

更新 - 我对这个问题的具体答案。

正如所有“帖子”所述,这个问题有多个答案,这最终是我用过的,希望它可以帮助其他人*:

public DateTime ProcessDateAndTime(string dateString)
{
    string dateAndTimeString = dateString;

    string[] timeFormats = new string[]
    {
        "hh:mm tt", "hh:mm:ss tt",
        "h:mm tt", "h:mm:ss tt", 
        "HH:mm:ss", "HH:mm", "H:mm"
    };
    // check to see if the date string has a time only
    DateTime dateTimeTemp;
    if (DateTime.TryParseExact(dateString, timeFormats,
        CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.None, out dateTimeTemp))
    {
        // setting date to 01/01/1900
        dateAndTimeString = new DateTime(1900, 1, 1).ToShortDateString() + " " + dateString;
    }

    return DateTime.Parse(dateAndTimeString);
}

*注意:此方法基于以下假设:您的应用程序中只使用了特定数量的时间格式,并且保证正确格式化日期和时间,或仅传入时间字符串(预先验证以便删除)垃圾文本)。

答案

你可以使用DateTime.TryParseExact

另一答案

使用

Convert.ToDateTime(string value, IFormatProviderProvider provider)

由于字符串有不同的风格,因此根据需要提供不同的格式提供程序。

订单可能是:

  • DateOnly
  • 仅限时间
  • 约会时间

如果失败,转换将抛出格式异常。如果您不想有异常,请使用Datetime.TryParse,因为它返回一个布尔值。

根据字符串的表示方式,您可以拥有3个以上的格式提供程序。

另一答案

您可以尝试使用RegEx,BTW验证字符串,可以找到DateTime验证的良好正则表达here

另一答案

这可能不是最好的,但它回答了你的问题:

    string dateString = "9:53AM";
    if (!dateString.Contains('/')))
    {
        dateString = DateTime.Now.ToShortDateString() + " " + dateString;
    }
另一答案

查看字符串的长度将是直截了当的,并将支持多种格式。具有日期和时间的字符串肯定比仅具有时间的字符串长。但是,如果您的输入可能具有高精度的时间(12:30:30:50:20 vs 12/11/11 12:30)且精度低,则无效。

如果您不需要立即知道字符串中的值,并且只想添加默认日期,则此解决方案是理想的。

例如,如果您支持第二个时间,则时间将为8个或更少字符,日期时间将为9个或更多。

另一答案

这是在不知道所有可能的时间格式的情况下执行此操作的一种方法:

CultureInfo provider = CultureInfo.CurrentCulture;
DateTime time;
DateTime datetime;
bool isTime = DateTime.TryParse(dateString, provider, DateTimeStyles.NoCurrentDateDefault, out time) 
            && time.Date == DateTime.MinValue.Date
            && DateTime.TryParse(dateString, provider, DateTimeStyles.None, out datetime) 
            && datetime.Date != DateTime.MinValue.Date);

如果字符串只有一个时间,那么第一个TryParse会将日期部分设置为1/1/0001或DateTime.MinValue.Date,第二个TryParse会将日期部分设置为当前日期。除非是在回到1/1/0001之后由Doctor Who运行,否则这将有效。

另一答案

鉴于时间可以采用各种格式(12/24?),最好以一些预先定义的顺序使用多个模式,尝试解析每个模式并在第一次成功时解析。

另一答案

你也可以试试

DateTime aTime;
if (DateTime.TryParse(dateString, CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.NoCurrentDateDefault, out aTime))
{
    //if the there is no date part in the dateString, date will
    // default to Gregorian 1/1/0001
}

以上是关于如何验证“日期和时间”字符串是否只有时间?的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 模型中一起验证日期和时间字段

超实用的php代码片段

教程4 - 验证和权限

原生JavaScript判断是否为邮箱危险字符验证长度验证网址验证小数整数浮点数等常用的验证

验证字符串是不是只有数字并且只有一定的长度

Perl CGI 日期和时间选择器,自动填充当前日期和时间