0

我正在将格式化的日期时间变量传递给 SQL Server。我需要将日期与时间连接起来,因为它们来自 2 个不同的控件。该代码似乎可以正常工作,两个字符串一旦放在一起,就会被解析为 DateTime。

问题是当它上升到 SQL Server 时,时间部分会丢失,并且该列显示yyyy-mm-dd hh:mm:ss.fff与(例如) 2012-09-03 00:00:00.000相反。2012-09-03-12 1:23:45:678

这是我的代码,为了测试,我用硬编码的变量替换了时间,并且objInfo.SemesterEnrollStart是一个DateTime变量。此外,控件dpEnrollStartDatePicker.

DateTime semDate = Convert.ToDateTime(dpEnrollStart.SelectedDate);
string semTime = "12:34";
DateTime dtp = DateTime.ParseExact(semDate.ToShortDateString() + " " + semTime, "MM/dd/yyyy hh:mm", null);
objInfo.SemesterEnrollStart = dtp;  

非常感谢!

编辑:所以,这是我用来调用存储过程的 c#:

objInfo.SemesterQuarter =  ddl_SemQuarter.SelectedValue;
objInfo.SemesterYear = ddl_SemYear.SelectedValue;
objInfo.SemesterStart = Convert.ToDateTime(dpSemStart.SelectedDate);
objInfo.SemesterEnd = Convert.ToDateTime(dpSemEnd.SelectedDate);

DateTime semDate = Convert.ToDateTime(dpEnrollStart.SelectedDate);
string semTime = "12:34:00.000";
objInfo.SemesterEnrollStart = DateTime.ParseExact(semDate.ToShortDateString() + " " + semTime, "MM/dd/yyyy HH:mm:ss.fff", null);                                                        

objInfo.SemesterEnrollEnd = Convert.ToDateTime(dpEnrollEnd.SelectedDate);
objInfo.PriorityRegDate = Convert.ToDateTime(dpPriRegDate.SelectedDate);
objInfo.AgeCutoffDate = Convert.ToDateTime(dpAgeCutoffDate.SelectedDate);
lblTSMessage.Text = objInfo.SemesterEnrollStart.ToString();
objManager.AddNewSemester(objInfo);
4

1 回答 1

1

问题在于您在 ParseExact 中使用的格式:

 MM/dd/yyyy hh:mm

因此,您故意丢弃秒和毫秒部分。

相反,您需要使用以下方法解析日期:yyyy-MM-dd HH:mm:ss.fff但是您需要在 semTime 变量中捕获seconds(ss) 和(fff) ,否则该方法将失败。millisecondsParseExact

一个例子:

string s = "01/01/2012 11:23";
//FAILS because there's not ss and fff part 
DateTime dtp = DateTime.ParseExact(s, "MM/dd/yyyy hh:mm:ss.fff", null);

string s = "01/01/2012 11:23:12.678";
//Works because there's a ss and fff part
DateTime dtp = DateTime.ParseExact(s, "MM/dd/yyyy hh:mm:ss.fff", null);
于 2012-09-05T18:06:31.230 回答