2011-09-19 136 views
-1

我正在製作一個應用程序,該應用程序在我公司的每臺計算機上運行,​​並從Active Directory中的當前登錄用戶查詢信息。不幸的是,我們也使用德語和英語操作系統,這就是我遇到以下問題的原因。 在英文操作系統上查詢日期格式爲YYYY.MM.DD,但在德語操作系統上格式爲DD.MM.YYYY。所以我的問題是,我如何將德國日期轉換爲英文日期格式?這很重要,因爲我會將此日期插入到SQL數據庫中,但在德語PC上,我收到以下錯誤:「將varchar數據類型轉換爲日期時間數據類型導致超出範圍值。」我不知道這是否相關,但我有一個char *變量的日期。如何將日期從德文格式轉換爲英文格式?

謝謝!

+1

最明顯的方法是將英文日期字符串的新字符串和strcpy部分製作成德語日期字符串,從/從不同的偏移量開始。由於這些字段的長度是固定的,因此它只是3 strcpy()s :) – Radu

+1

您使用的是什麼API?它是否提供了從數據庫中提取日期的獨立於語言環境的方法?您不應該將日期格式化爲字符串,然後解析它,因爲效率低下且容易出現此類錯誤。 – trojanfoe

+0

好的,但我必須檢查收到的日期是英文還是德文格式。我怎麼樣? – kampi

回答

1

我在SQL中發現了一個更簡單的方法。

選擇轉換(日期時間,'19 .08.2011 13時17分01' 秒,104) 這將導致以下內容:2011-08-19 13:17:01.000 我覺得這是做什麼最簡單的方法我想要。謝謝你們的幫助!

1

如果你有絕對的把握,你總是有上述德國的格式,然後我通過創建英語表示相同長度的字符*和周圍洗牌的價值觀看到一個C選項:

MyEnglishD [0] = MyGermanD [ 6 ]; 
MyEnglishD [1] = MyGermanD [ 7 ]; 
MyEnglishD [2] = MyGermanD [ 8 ]; 
MyEnglishD [3] = MyGermanD [ 9 ]; 
MyEnglishD [4] = '.'; 
MyEnglishD [5] = MyGermanD [ 3 ]; 
MyEnglishD [6] = MyGermanD [ 4 ]; 
MyEnglishD [7] = '.'; 
MyEnglishD [8] = MyGermanD [ 0 ]; 
MyEnglishD [9] = MyGermanD [ 1 ]; 

另一種選擇我寧願是使用日期格式字符串在你的SQL INSERT代碼(例如用於Oracle):

INSERT INTO MyTable (MyDateCol,...) 
SELECT TO_DATE (:MyDateVal, :MyDateFormat), :anotherVal... FROM DUAL; 

對於英語日期格式應爲「YYYY.MM.DD」和德國「 DD.MM.YYYY'。

0

您必須將日期時間格式的varchar日期轉換爲寫入它們。

您可以通過捕獲錯誤來檢測「德語」格式,然後在單獨的變量中從「DD-MM-YYYY」中構建「YYYY-MM-DD」。

0

如何在時間戳中存儲數據?或者在api中查找setLocale並將其設置爲en-us

+0

關於將其存儲在某種時間戳/日期/時間列中的問題_is_。但是輸入是某種字符串。有人必須進行轉換。它似乎不是DB :-) –

相關問題