2012-06-14 122 views
1

我正在使用C#在winforms中做客戶端服務器項目。客戶在特定日期請求文件。客戶端在Windows 7 32位系統中運行,服務器在Windows Server 2008 R2中運行。System.FormatException:字符串未被識別爲有效的日期時間

此代碼在我的客戶端將日期時間值轉換爲字符串。

string date = dateTimePickerFrom.Value.ToString("dd/MM/yyyy HH:MM", CultureInfo.InvariantCulture); 

這是服務器用於從字符串返回日期時間值

string dat = Encoding.ASCII.GetString(bb.ReadBytes(len)); 
FromDate = DateTime.ParseExact(dat, "dd/MM/yyy HH:MM", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None); 

我得到「System.FormatException代碼:字符串未被識別爲有效的DateTime在System.DateTimeParse。 .ParseExact(String s,String format,DateTimeFormatInfo dtfi,DateTimeStyles樣式)「服務器端出現此錯誤。如何解決這個問題?請任何幫助。

+0

在sqlserver日期或日期時間上使用什麼類型的數據我認爲DateTime.ParseExact只有3個參數 –

+0

你如何發送它? – V4Vendetta

+0

可以肯定的是,在執行最後一行代碼('ParseExact')之前,請檢查'dat'包含的內容。此外,請檢查是否可以在沒有任何服務器的情況下進行這些轉換,等等。選擇一個日期,轉換爲字符串,轉換回日期並查看它是否有效。 – SimpleVar

回答

0

爲什麼在日期時間值和字符串之間轉換兩次?
在客戶端,將數據時間值轉換爲字符串,然後將字符串發送到服務器。
在服務器端,您將獲得該字符串,並將其轉換回日期時間。
你爲什麼要做這些轉換? datetime-> string-> datetime,這是無稽之談。
您應該將datetime直接發送到服務器,並直接獲取datetime。我想你正在使用套接字來做到這一點。 不要讓字符串打擾你。
代碼波紋管:

 DateTime now = DateTime.Now; 
     long l0 = now.ToBinary(); 
     byte [] array = BitConverter.GetBytes(l0); 
     //here you can send it to the server 

     //on the server 
     byte[] buffer = null; //receive bytes 
     long l1 = BitConverter.ToInt64(buffer,0); 
     DateTime time = DateTime.FromBinary(l1); 
+0

我不是英語母語的人,我不確定我是否清楚。這是,你應該不使用字符串全部。日期 - >字符串 - >日期,你需要的是一個日期,沒有任何關於字符串。 – Jerry

+0

是否有可能將日期時間轉換爲字節? – Murugesan

+0

實際上,datetime被保存爲一個長的數據類型,實際上是4個字節。所以,我們可以通過DateTime.ToBinary()獲得一個很長的值,並使用BitConvertor類獲得4個字節。因爲我發佈的代碼顯示 – Jerry

0

試試這個,

long longVar = BitConverter.ToInt64(bb.ReadBytes(len)); 
DateTime dateTimeVar = new DateTime(1980,1,1).AddMilliseconds(longVar); 
+0

Whatz如此特別的'1980'? – V4Vendetta

1

你ParseExact()格式看起來像 dd/MM/yyy HH:MM,應該dd/MM/yyyy HH:MM

相關問題