2011-07-04 35 views
7

Tôi có hộp văn bản asp là nơi người dùng sẽ chỉ điền giá trị năm, Đối với giá trị này tôi có Thuộc tính loại ngày giờ trong cột ứng dụng và cột ngày trong DB. Vì vậy, tôi muốn chuyển đổi txtYear.Text thành DateTime Nhưng nó sẽ chỉ giữ và/hoặc hiển thị năm. Xin hãy giúp tôi trong tình huống này.làm cách nào tôi có thể chỉ gán năm cho biết năm 2011 trong biến datetime trong C#

+5

Khi bạn chỉ cần một năm tại sao lưu trữ nó là 'DateTime' ở tất cả – V4Vendetta

+1

@ V4Vendetta Bạn có thể có thuộc tính' DateTime' trong Mô hình của mình trong khi bạn chỉ muốn hiển thị phần năm của nó trong ViewModel. – mok

Trả lời

7

Một DateTime đối tượng sẽ luôn luôn giữ một giá trị DateTime hoàn tất, bạn không thể sử dụng nó để lưu trữ một năm mà thôi. (những gì sử dụng sẽ được anyway?) Bên cạnh đó, các kiểu dữ liệu của một "năm" là int, không DateTime.

Vì vậy, tôi muốn đề xuất thay đổi thuộc tính của bạn thành kiểu dữ liệu int, cả trong mã và cơ sở dữ liệu của bạn.

+0

Thnx Nico, tôi sẽ thay đổi loại cả trong app ans db – Pankouri

+0

Bạn được chào đón! –

5

Để chỉ hiển thị năm sử dụng định dạng "yyyy".

 string s = "2011"; 
     DateTime d = new DateTime(int.Parse(s), 1, 1); 


     Console.WriteLine(d.ToString("yyyy")); 
     Console.WriteLine(d); 
+0

Cảm ơn giải pháp Bypass này. – Pankouri

4

Bạn cần phải xác định định dạng của giá trị DateTime bạn đang thao tác:

String dateTimeFormat = "yyyy"; 

Để chỉ hiển thị một phần của giá trị DateTime sử dụng như sau:

dateTimeValue.ToString(dateTimeFormat); 

Để đọc một giá trị String đại diện cho một năm thành một số DateTime sử dụng các mục sau:

DateTime.ParseExact(stringValue, dateTimeFormat, CultureInfo.InvariantCulture); 

DateTime.ParseExact Method (String, String, IFormatProvider) chuyển đổi chuỗi đại diện theo quy định của một ngày và thời gian để DateTime tương đương của nó bằng cách sử dụng định dạng cụ thể và thông tin định dạng văn hóa cụ thể. Định dạng của biểu diễn chuỗi phải khớp chính xác với định dạng được chỉ định.

DateTime.ToString Method chuyển đổi giá trị của đối tượng DateTime hiện tại thành biểu diễn chuỗi tương đương.

1

Thay vì áp dụng bất kỳ chức năng thao tác chuỗi nào, hãy sử dụng thuộc tính Năm. Kiểm tra tài liệu trên msdn bằng cách truy cập vào liên kết bên dưới.

DateTime.Year Property

0

Nếu bạn muốn chỉ một năm, tại sao bạn không làm cho nó thuộc loại smallint?

Dù sao nếu bạn thực sự muốn làm cho nó một năm,

DateTime x = new DateTime(Convert.ToInt32(txtYear.text), 1, 1); 

Nhưng chắc chắn rằng bạn xác nhận rằng txtYear.text thực sự không có một năm hợp lệ.

1

tôi giả định tên hộp văn bản là txYear

DateTime dt = new DateTime (Convert.ToInt32(txYear.text),1,1) 

lưu giá trị dt này trong cơ sở dữ liệu

+0

thanx cho giải pháp Bypass này, tôi đã tìm kiếm điều này. nhưng từ tất cả các câu trả lời tôi đi đến kết luận rằng tôi nên thay đổi loại thành int hoặc smallint, đó là thuận tiện hơn để đối phó với. – Pankouri

+0

:) có sử dụng như số nguyên là ý tưởng tốt hơn, nhưng khi u sử dụng loại datetime bạn có thể sử dụng hàm dựng sẵn sql để thao tác datetime – DeveloperX

2

Một DateTime luôn có một thành phần ngày đầy đủ. Khi bạn tạo cá thể DateTime, bạn sẽ cần chỉ định một tháng và một ngày, nhưng bạn có thể bỏ qua chúng trong việc sử dụng của bạn.

DateTime d = new DateTime(int.Parse(txtYear.Text, 1, 1); 

txtYear.Text = d.ToString("yyyy"); 

Thậm chí tốt hơn không nên sử dụng DateTime mà chỉ sử dụng int. Nếu bạn chỉ có một năm, bạn chỉ cần một int.

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