我正在尝试迭代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
模式识别它,但我不是正则表达的专家。无论如何,如果有另一种解决方案,我很高兴看到。请注意,只有前三个值和表中的最后一个是日期,其他值不是日期,而是包含整数或其他字符串值。
答案 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以确保您正在使用的值实际上是有效的日期时间。