2013-07-01 29 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'是你想要應用新格式的當前工作表。 –