2017-03-09 127 views
-2

我正在將excel文件中的日期值(「24/11/2016」)導出到C#.NET中的SQL數據庫表中。我正在使用下面的代碼到我的函數來解析日期值從字符串到日期時間。但它不起作用。我試圖調試它,但是當它出現在那一行時,它終止了。任何人都知道什麼是問題。從字符串解析日期時間到c#

var date = row["Date"].ToString(); 

DateTime dates;  
string format = "MM-dd-yyyy"; 

if (!DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dates)) 
{ 
    continue; 
}       
else 
{ 
    dates = DateTime.Parse(date); //terminating at this line 
} 
+1

我很好奇爲什麼有2個解析命令?如果TryParse失敗,爲什麼你認爲Parse會成功? – dana

+0

感謝您糾正我。但實際的問題是將字符串值解析到Datetime中。 –

回答

6

你的格式應該是dd-MM-yyyy你有24/11/2016日期,你可以在這個MSDN文章中瞭解更多關於字符串格式Custom Date and Time Format Strings

變化

string format = "MM-dd-yyyy"; 

string format = "dd-MM-yyyy"; 

編輯基於由OP評論 - 存儲在SQL服務器

日期時間存儲在標準格式的SQL服務器格式化的日期,是不是在事實上呈現的格式,我們看到像「DD-MM-YYY 」。本文Solving the Datetime Mystery解釋了內部SQL服務器格式。

Solving the Datetime Mystery

摘錄那麼,如何SQL Server在內部存儲日期?它使用8個字節到 存儲日期時間值 - 日期的前4個和時間的第二個4。 SQL Server可以將兩個4字節的集合解釋爲整數。 對於日期部分,SQL Server存儲的值是在基準日期1900年1月1日之前或之後的天數 。由於此存儲協議爲 ,SQL Server假定1900年1月1日的日期爲 在我的第一個例子中沒有提供日期。 SQL Server內部 存儲值0。負數表示較早的日期比 1月1日,1900年

SQL服務器存儲用於時間 時鐘的數目的第二整數午夜後蜱。第二個包含300個滴答,所以標記 等於3.3毫秒(ms)。通過將日期時間值轉換爲二進制(8)值和 ,可以使用子字符串函數來提取每個4字節的集合,從而可以看到天和 時鐘滴答的值。圖3中的代碼 然後將每組4個字節轉換爲整數。

+0

upvoters讚賞:看看建議的代碼和代碼在問題上是一樣的,那應該是'string format =「dd-MM-yyyy」',@Adil:現在編輯完成後就完美了..大聲笑 –

+0

感謝糾正我的格式。但問題在於將字符串值解析到Datetime中。爲什麼它不轉換成日期時間。我有日期值到像「24/11/2016」Excel文件,我必須將它存儲到像「2016-11-24」的SQL數據庫表。 –

+0

@不幸運,我已經建議dd-MM-yyyy,雖然它看起來像,但你指出的陳述並沒有被建議爲修正。無論如何感謝讓我澄清了歧義! – Adil

0

最後我做到了使用以下代碼:

字符串格式= 「DD/MM/YY」;

如果(DateTime.TryParseExact(日期,格式,CultureInfo.InvariantCulture,DateTimeStyles.None,淘汰日期)!)

{繼續; }

別的

{日期= DateTime.ParseExact(日期,格式,的CultureInfo。InvariantCulture的); }

String datetime = dates.ToString(「yyyy-MM-dd」);

感謝所有。