2013-07-02 76 views
61

Tôi đang cố gắng lưu định dạng ngày hiện tại từ C# và chuyển đổi nó sang định dạng ngày SQL Server như vậy yyyy-MM-dd HH:mm:ss để tôi có thể sử dụng nó cho truy vấn Update của mình.định dạng ngày giờ sang định dạng SQL bằng C#

Đây là mã đầu tiên của tôi:

DateTime myDateTime = DateTime.Now; 
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss"); 

Sản lượng ngày là ok nhưng thời gian luôn luôn là "12:00:00" vì vậy tôi đã thay đổi mã của tôi như sau:

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.TimeOfDay.ToString("HH:mm:ss"); 

Nó đã cho tôi một lỗi biên dịch "FormatException đã được unhandled" và đề nghị tôi cần phải phân tích cú pháp. Vì vậy, tôi đã cố gắng làm điều này để mã của tôi theo nghiên cứu của tôi ở đây trong staackoverflow:

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss"); 

hoặc

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss"); 

nhưng nó đem lại cho tôi đó là một phương pháp mà không có giá trị trong bối cảnh nhất định. Tôi đã thử tìm kiếm các giải pháp cho vấn đề của mình và hiện đang bị kẹt trong hai giờ. Tôi vẫn còn một chút mới trong C#, bạn có thể giúp đỡ không?

+0

Bạn đã xem DateTime.TryParseExact chưa? – Tim

+0

http://stackoverflow.com/questions/2191120/net-datetime-to-sqldatetime-conversion – wudzik

+3

Tại sao không sử dụng tham số để cập nhật 'DateTime' hoặc bạn lưu trữ nó dưới dạng chuỗi? Ngoài ra 'ToString' trên' Date' sẽ ngụ ý rằng thời gian luôn là '12: 00: 00' – V4Vendetta

Trả lời

121

thử loại này bên dưới

DateTime myDateTime = DateTime.Now; 
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); 
+0

cảm ơn bạn rất nhiều tôi đã cố gắng chuỗi sqlFormattedDate = myDateTime.DateTime ... vì một số lý do đây là những gì tôi muốn đạt được. –

+0

Tìm kiếm của tôi trong stackoverflow liên tục giới thiệu tôi đến một tham chiếu sai mặc dù câu hỏi đã được trả lời nhiều lần, người mới như tôi không thể liên quan vì điều này. Xin lỗi cho tất cả, tôi sẽ đóng câu hỏi ngay khi tôi có thể. –

+1

Tôi nghĩ định dạng C# "Sortable" có thể thực hiện tương tự. Vì vậy, bạn chỉ có thể làm myDateTime.ToString ("s"); – ProVega

3

mã đầu tiên của bạn sẽ hoạt động bằng cách làm

DateTime myDateTime = DateTime.Now; 
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part 
3

vấn đề này của bạn là trong "Ngày" tài sản đó truncates DateTime để chỉ ngày. Bạn có thể đặt các chuyển đổi như thế này:

DateTime myDateTime = DateTime.Now; 
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()! 
5

Câu trả lời đúng đã được trao "thông số sử dụng". Định dạng một ngày và chuyển nó như là một chuỗi để SQL-Server có thể dẫn đến lỗi vì nó phụ thuộc vào các thiết lập như thế nào ngày được diễn giải ở phía máy chủ. Ở châu Âu, chúng tôi viết '1.12.2012' để chỉ ra ngày 1 tháng 12 năm 2012, trong khi ở các quốc gia khác, điều này có thể được coi là ngày 12 tháng 1.

Khi phát hành báo cáo trực tiếp trong SSMS, tôi sử dụng định dạng yyyymmdd có vẻ khá chung chung. Tôi đã không gặp phải bất kỳ vấn đề nào về các cài đặt khác nhau mà tôi đã làm cho đến nay.

Có một dạng hiếm khi được sử dụng, đó là một chút lạ, nhưng làm việc cho tất cả các phiên bản:

select { d '2013-10-01' } 

sẽ trở lại đầu tiên của tháng mười năm 2013.

select { ts '2013-10-01 13:45:01' } 

sẽ trở lại 01 Tháng 10, 1 : 45: 01 PM

Tôi đặc biệt khuyên bạn nên sử dụng tham số và không bao giờ định dạng mã SQL của riêng bạn bằng cách dán cùng nhau phát triển trong nước cho những mảnh vỡ.Đó là một mục nhập cho SQL injection và các lỗi lạ (định dạng một giá trị float là một vấn đề tiềm năng)

1

câu trả lời tôi đang tìm kiếm là:

DateTime myDateTime = DateTime.Now; 
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); 

Tôi cũng đã học được rằng bạn có thể làm điều đó đây cách:

DateTime myDateTime = DateTime.Now; 
string sqlFormattedDate = myDateTime.ToString(myCountryDateFormat); 

nơi myCountryDateFormat có thể được thay đổi để đáp ứng thay đổi tùy theo yêu cầu.

Xin lưu ý rằng thẻ "Câu hỏi này có thể đã có câu trả lời ở đây:" chưa thực sự trả lời câu hỏi vì bạn có thể thấy nó sử dụng ".Date" thay vì bỏ qua câu hỏi đó. Nó khá khó hiểu đối với các lập trình viên mới của .NET

+0

Có ba câu trả lời ở đây nên đã giải quyết được vấn đề của bạn - bạn nên chấp nhận một trong những câu trả lời đó chứ không phải là thêm của riêng bạn. –

+0

cảm ơn muốn chia sẻ ý tưởng và chỉ ra rằng mục được gắn thẻ là gây hiểu lầm. Cũng mới trong stackoverflow. –

1

Tại sao không bỏ qua chuỗi hoàn toàn:

SqlDateTime myDateTime = DateTime.Now; 
+0

Tính năng này có hoạt động trên net 4.0 không? –

23

Sử dụng định dạng chuẩn datetime "s" cũng sẽ đảm bảo khả năng tương thích quốc tế (MM/dd so với dd/MM):

myDateTime.ToString("s"); 

=> 2013-12-31T00:00:00 

Toàn bộ Tùy chọn: (mã: kết quả mẫu)

d: 6/15/2008 
D: Sunday, June 15, 2008 
f: Sunday, June 15, 2008 9:15 PM 
F: Sunday, June 15, 2008 9:15:07 PM 
g: 6/15/2008 9:15 PM 
G: 6/15/2008 9:15:07 PM 
m: June 15 
o: 2008-06-15T21:15:07.0000000 
R: Sun, 15 Jun 2008 21:15:07 GMT 
s: 2008-06-15T21:15:07 
t: 9:15 PM 
T: 9:15:07 PM 
u: 2008-06-15 21:15:07Z 
U: Monday, June 16, 2008 4:15:07 AM 
y: June, 2008 

'h:mm:ss.ff t': 9:15:07.00 P 
'd MMM yyyy': 15 Jun 2008 
'HH:mm:ss.f': 21:15:07.0 
'dd MMM HH:mm:ss': 15 Jun 21:15:07 
'\Mon\t\h\: M': Month: 6 
'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00 

phụ trợ orted trong .NET Framework: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
tham khảo: DateTime.ToString Method

+0

Điều này không đủ chi tiết (bỏ lỡ mili giây) và sẽ khiến bạn gặp rắc rối trong các truy vấn dựa trên việc đặt hàng theo ngày. – reijerh

0

chỉ bạn đặt chữ "T" + DateTime.Now.ToLongTimeString() + '2015-02- 23'

+0

đầu tiên ngày XD date + "T" + DateTime.Now.ToLongTimeString() –

0

Nếu bạn muốn cập nhật một bảng với dateTime đó, bạn có thể sử dụng chuỗi sql của bạn như ví dụ sau:

int fieldId; 
DateTime myDateTime = DateTime.Now 
string sql = string.Format(@"UPDATE TableName SET DateFieldName='{0}' WHERE FieldID={1}, myDateTime.ToString("yyyy-MM-dd HH:mm:ss"), fieldId.ToString()); 
+1

Câu hỏi này đã được trả lời và chấp nhận với một giải pháp thanh lịch hơn. Và bạn đang thiếu một '' 'đóng. – Jan

0

vấn đề của bạn là trong Date tài sản đó truncates DateTime để chỉ ngày. Bạn có thể đặt các chuyển đổi như thế này:

DateTime myDateTime = DateTime.Now; 

string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); 
0

nếu bạn muốn lưu trữ ngày hiện tại trong bảng, do đó bạn có thể sử dụng

GETDATE();

hoặc vượt qua chức năng này như một tham số

ví dụ. 'cập nhật tblname set curdate = GETDATE() trong đó colname = 123'

Các vấn đề liên quan