2013-11-26 19 views
1

我的託管服務在不同的時區有一臺服務器,然後我住(太平洋時間)。我想調整插入時間(到MS SQL數據庫)到我當地的時間。 (歐洲)。其實這裏是我的下面的代碼,它顯示了正確的時間(讓我們說:04:00:15),但在MS SQL中總是插入一條記錄作爲AM時間(上午04:00:15 AM)。SQL中的時間總是「AM」。爲什麼?

DateTime dt = new DateTime(DateTime.UtcNow.Ticks); 

String dateString = TimeZoneInfo.ConvertTimeFromUtc(dt,TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time")).ToString("yyyyMMdd hh:mm:ss"); 

插入時(10AM或10PM)無關緊要,記錄始終記爲「AM」時間。爲什麼?

我在ms sql中插入這個日期爲「datetime」。

回答

5

由於ToString調用中的小寫「hh」時間部分指的是12小時時間。

您需要使用大寫字母「HH」作爲24小時制。

請參閱 - Custom Date and Time format strings(MSDN)。

+0

這就是爲什麼你應該傳遞一個日期對象到SQLServer,而不是將它轉換爲一個字符串,然後再發送它。 – Chris

+0

哇,它的工作。其實我很久以前就知道這一點,但是我對代碼做了一些修改,並且忘記了這一點(沒有評論我的代碼),並且我爲了這個問題而毆打我的頭腦。再次感謝,案例關閉:) – rootpanthera

0

請勿使用字符串來表示日期。在數據庫中使用datetime。使用SqlDateTime作爲參數。而且你永遠不需要處理上面的問題。

如果末,以發送字符串到數據庫,總是指定您的應用程序的連接SET DATEFORMAT明確。如有疑問,請使用unseparated string formatyyyymmdd,因爲它不受當前SET DATEFORMAT設置的影響。