2013-07-01 89 views
0

我想遍历一个数据集并将SQL Server mm/dd/yyyy hh:mm:ss tt(例如2011/1/1 3:56:50 PM)返回的默认格式的所有DateTime列的格式更改为dd-Mon-yyyy(例如01-Jan -2011)。这可能吗?更改数据列日期时间格式?

我可以通过下面的代码块访问的数据表中的每个表中的数据集:

Using ds As DataSet = _bo.getHistoryDataSet(projectId) 

    For Each dt As DataTable In ds.Tables 

     For Each col As DataColumn In dt.Columns 
      If col.DataType Is GetType(DateTime) Then 
       //Format column here? 
      End If 
     Next 
    Next 

End Using 

但我不能似乎能够格式分配给列。有没有办法给列分配一个通用格式,还是必须循环遍历这个循环中的每一行,然后分配row(column) = row(column).ToString("Format Here")

谢谢!

+5

'DateTime' ***不具有格式***;一个'DateTime' *只是一个数字* - 在它周围有一些语义。当显示* DateTime时,像“格式”这样的概念适用于用户界面,但不适用于'DateTime'本身。这有点像说“我有一个布尔属性;我怎样才能使用斜体?” –

+0

'ToString()'格式可以简单地为'“dd-MMM-yyyy”'。但是,正如其他人所说,格式用于显示日期。您无法设置DataTable中列的格式。 – JDB

+0

我使用DataTable使用EPPlus打印出Excel工作簿。我想要做的就是在写出工作簿之前更改DateTime列中单元格的格式。到目前为止,我只是做了一些错误检查,然后使用EPPlus的LoadFromDataTable方法将表写入工作簿。我不能循环遍历表格并更改每个DateTime列中单元格的字符串格式? – TimeBomb006

回答

2

DateTime没有隐式格式,它只是一个DateTime值。您可以将其格式设置为string,但这是另一种类型。

例如:

SELECT REPLACE(convert(varchar, YourDateColumn, 106), ' ', '-') 

How to format datetime & date

从你的问题您的评论:

我使用的数据表打印出来使用EPPlus Excel工作簿。 我想要做的就是在将工作簿写出之前,更改DateTime列中的单元格格式(格式为 )。截至目前,我只是做了一些错误 检查,然后使用EPPlus的 LoadFromDataTable方法将表写入工作簿。我不能循环遍历表格,并且在每个DateTime列中更改单元格的字符串格式?

是的,你可以格式化通过LoaFromDataTable与EPPlus创建的表列,使用适当的range.Style.Numberformat.Format

For Each col As DataColumn In tblExcel.Columns 
    If col.DataType = GetType(Date) Then 
     Dim colNumber = col.Ordinal + 1 
     Dim range = workSheet.Column(colNumber) 
     range.Style.Numberformat.Format = "dd-Mon-yyyy" 
    End If 
Next 

但是,我宁愿使用的数据库,因为它的效率更高。

+0

谢谢你的回答。我实际上问过这个问题,并使用类似的SQL来格式化日期,但是一个朋友告诉我,我应该从SQL中提供原始数据并将其格式化为可视层(在这种情况下为.NET)。我试图坚持最佳实践,所以如果可能的话,我想这样做。 – TimeBomb006

+0

@ TimeBomb006:使用数据库始终是最有效的方法。但是,如果您要在其他地方使用表格,则不仅对于'LoadFromDataTable',我会导出DateTime值并将其转换/格式化到最后。编辑我的答案以显示如何格式化已经创建的Excel表格。在这个例子中'tblExcel'是一个用于'LoadFromDataTable'的DataTable,'workSheet'是你想要应用新格式的当前工作表。 –