如何检查字符串是否包含日期?

时间:2016-01-13 16:46:32

标签: mysql regex vb.net date

我正在尝试迭代DataSet,这包含查询结果,例如SELECT * FROM tb 1,现在前三个字段包含日期,保存在数据库表中的格式为:

yyyy-MM-dd HH:mm:ss

但代码返回:

yyyy/MM/dd HH:mm:ss

特别是:

For z = 1 To ds.Tables(0).Columns.Count - 1

    Console.WriteLine(ds.Tables(0).Rows(x)(z).ToString())

Next

所以我需要识别当前字符串是否具有以下格式:yyyy/MM/dd HH:mm:ss并将其解析为:yyyy-MM-dd HH:mm:ss我很难以regex模式识别它,但我不是正则表达的专家。无论如何,如果有另一种解决方案,我很高兴看到。请注意,只有前三个值和表中的最后一个是日期,其他值不是日期,而是包含整数或其他字符串值。

3 个答案:

答案 0 :(得分:2)

日期没有格式。来自MSDN:

  

表示即时时间,通常表示为日期和时间   ...
  时间值以称为刻度线的100纳秒单位进行测量,特定日期是格里高利历日历中自公元0001年1月1日午夜12:00起的刻度数...例如,刻度值< strong> 31241376000000000L 表示日期,星期五,1月01日,0100 12:00:00午夜。

所以,DateTime只是一个大数字。代表他们为&#34; dd / MM / yyyy&#34;是DateTime类型的魔力的一部分。部分问题是:

Console.WriteLine(ds.Tables(0).Rows(x)(z).ToString())

行项目为Object。它不会像DateTime类型那样,除非/直到你将它变成DateTime变量。打印为DateTime简单,因为DataTable知道基础类型;但它将使用您的文化的默认格式。这使得看起来像日期具有内置格式(或者甚至更改了#34;格式更改&#34;如果您尝试将其设置为某些内容),但您是人类{{{ 1}}对我们大多数人来说没有意义。

要更改输出样式,首先需要将其转换为635882810022222112L变量。 显然,初步步骤是确定任意列是否为日期。而不是测试&#34;格式&#34; 输出,测试基础数据类型。这确实假定DateTime中的DateTime列适当:

DataTable

然后要更改显示,首先将其变为If ds.Tables(0).Columns(n).DataType = GetType(DateTime) Then '... End If ' Or: If ds.Tables(0).Rows(x)(z).GetType Is GetType(DateTime) Then '... End If 变量:

DateTime

获取和转换为Dim dt As DateTime If ds.Tables(0).Rows(x)(z).GetType Is GetType(DateTime) Then dt = Convert.ToDateTime(ds.Tables(0).Rows(x)(z)) ' cant change "format" but you can change how it displays: Console.WriteLine(dt.ToLongDateString) Console.WriteLine(dt.ToString("yyyy-MM-dd HH:mm tt")) Console.WriteLine(dt.ToString("dd MMM, yyyy")) End If 的更简单方法是使用DateTime扩展程序:

Field(Of T)

Dim dt = ds.Tables(0).Rows(x).Field(Of DateTime)(y)

这不会将格式应用于日期。 when I peform the insert usually do this: Date.Now.ToString("yyyy-MM-dd HH:mm:ss") so I apply a format to date to insert... if I don't format correctly the date as I shown I get this value 0000-00-00 00:00:00转换为字符串。而&#34; yyyy-MM-dd HH:mm:ss&#34;是将日期数据作为字符串传递给MySql时使用的正确格式,不需要它。 MySQL数据提供程序知道如何将Net DateTime var转换为MySql需要/想要的数据并再次返回 - 这是它的工作。

DateTime

您阅读的格式要求是您需要在MySql shell或WorkBench UI中使用的格式要求,因为您正在键盘输入文本/字符串....这并不意味着代码必须将' this will work fine cmd.Parameters.Add("@SomeDate", MySqlDbType.DateTime).Value = myDateTimeVar 变量转换为特定格式的字符串以进行存储。

答案 1 :(得分:-1)

我最终使用了这个

              Try
                Dim theDate As DateTime = dr.Item(colName)
                Return theDate
            Catch
                ' do something
            End Try

我很乐意看到更好的方法。

答案 2 :(得分:-1)

基于您似乎要求简单替换的内容

For z = 1 To ds.Tables(0).Columns.Count - 1

    Console.WriteLine(ds.Tables(0).Rows(x)(z).ToString().Replace("/","-"))

Next

如果它进来/他们被改为 - 如果它进来 - 他们保持完整。

根据您想要的灵活性,可能需要TryParse以确保您正在使用的值实际上是有效的日期时间。