2015-10-16 55 views
0

也許有人可以幫我以下的問題:日期時間字符串不上幾臺機器

Datetime? _startdate = DateTime.ParseExact(reader["STARTDATE"].ToString(), "dd/MM/yyyy", null); 

在我的機器,時間顯示爲16-10-2015。該應用程序運行沒有問題。

但隨着顯示爲2015年10月16日申請的時間在計算機上返回一個錯誤:

String was not recognized as a valid DateTime.

感謝您的時間

+0

你嘗試'DateTime.ParseExact(閱讀器[ 「STARTDATE」]的ToString(「DD/MM/YYYY 「),」dd/MM/yyyy「,null)' –

+0

是的,那不起作用:」方法Tostring ....沒有超載「 – user3114347

+2

@ user3114347等待,究竟是什麼'reader [」STARTDATE「]'?這不是DateTime嗎?如果是這樣,你可以直接使用它(通過一個強制轉換,比如'(DateTime)reader [「STARTDATE」]'),你不必首先對它進行初始化,然後parseexact它。 –

回答

4

您的評論指出,reader["STARTDATE"]是從日期時間列你的數據庫,在這種情況下,你不應該是「解析」它在所有,它已經是一個日期時間

Datetime? _startdate = (DateTime?)reader["STARTDATE"]; 

在數據庫中看到的是不是「形式」,它是 - 它只是數據庫選擇的格式爲將顯示給您 - 可能基於您自己的計算機(或數據庫服務器)區域設置。

+0

@MrLister - s'ok - 始終發生:) – Jamiec

+0

我的不好,startdate是這樣的在sqslquery:STARTDATE = CONVERT( nvarchar,GETDATE(),105) – user3114347

+1

@ user3114347 - 那麼不要這樣做!使它'STARTDATE = GetDate()' - 不要將日期時間轉換爲字符串 – Jamiec

3

假設reader是SqlDataReader的並"STARTDATE"是在數據庫中(可爲空的)日期時間字段的名稱,reader["STARTDATE"]已經是DateTime對象。

這意味着你可以通過一個簡單的

(DateTime?)reader["STARTDATE"] 

編輯替換問題

DateTime.ParseExact(reader["STARTDATE"].ToString(), "dd/MM/yyyy", null) 

代碼:

基於以上意見,問題終於變得清晰現在: SQL查詢中的STARTDATE字段不是日期時間,而是定義爲CONVERT(nvarchar,GETDATE(),105)

所以,既然SQL查詢不能改變,解決的辦法是

  • 要麼使用

    DateTime.ParseExact(reader["STARTDATE"].ToString(), "dd-MM-yyyy", null) 
    

    因爲SQL的轉換格式105被定義爲返回dd-MM-yyyy(見MSDN)。

  • 或者,如SQL GetDate()是當前的日期和時間,無論如何,簡單地放棄這個結果,並使用

    DateTime.Now.Date 
    

    代替。

0

我應該有它轉換成合適的格式爲: 「DD-MM-YYYY」