2011-02-09 57 views
7

Tôi có đối tượng timepan chỉ cần giữ thời gian, không có ngày. Tôi sẽ sử dụngLưu trữ thời gian hiện tại mà không có phần mili giây

DateTime.Now.TimeOfDay 

nhưng vấn đề là nó mang lại cho thời gian theo định dạng

15:51:51.7368329 

Tôi không muốn các thành phần nghìn giây. Làm thế nào tôi có thể cắt nó ra?

+1

Bạn đang lưu trữ ở đâu? – Oded

+4

Đây có phải chỉ là về hiển thị cho người dùng hay bạn thực sự cần phải biến điều này thành một khoảng thời gian khác với thành phần mili giây bị loại bỏ? – Ani

+0

vâng, tôi đoán nó chỉ hiển thị, vì vậy tôi sẽ chỉ đi với các ToString() phương pháp – xbonez

Trả lời

10

Bạn có thể sử dụng các thuộc tính DateTime.Now.Hour/Minute/Second hoặc bạn có thể sử dụng DateTime.Now.ToString("HH:mm:ss").

Tham khảo ở đây để biết thêm: http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx

+0

Các "h: mm: ss" sẽ không cho kết quả mong muốn. 'h' đại diện cho đại diện 1 chữ số của các giờ phi quân sự và' mm' đại diện cho biểu thị 2 chữ số của tháng hiện tại. Do đó, điều này sẽ cung cấp cho 3:02:51 cho ví dụ được cung cấp, thay vì 15:51:51, theo yêu cầu. –

+0

Tôi nghĩ rằng bạn nên có một cái nhìn tại liên kết này http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx –

+1

Tôi nghĩ rằng MM đại diện cho tháng, trong khi mm đại diện cho phút. – xbonez

4

Nếu vấn đề là hiển thị nó, bạn có thể làm điều này:

DateTime.Now.ToString("HH:mm:ss") 
+0

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx Theo NET .. MM đại diện cho tháng và không phải phút. –

+0

@Mohib: bạn hoàn toàn đúng. Cập nhật cho phù hợp. Cảm ơn bạn. –

6

Chỉ cần trừ đi phần mili giây:

DateTime myTime = DateTime.Now.TimeOfDay; 
myTime = myTime.AddMilliseconds(-myTime.Millisecond); 

Nó có thể được thực hiện trong mã ít hơn, mà không chỉ định để myTime:

DateTime myTime = DateTime.Now.TimeOfDay.AddMilliseconds(
    -DateTime.Now.TimeOfDay.Millisecond); 

Mặc dù hơi sang trọng, nó là một ý tưởng tồi. Khi truy cập TimeOfDay hai lần, có khả năng là tại một thời điểm nào đó sẽ trôi qua một phần nghìn giây nữa trước lần truy cập thứ hai. Trong trường hợp đó kết quả sẽ không bằng 0 mili giây.

+0

dòng đầu tiên của bạn sẽ không biên dịch. –

8

Tôi tin rằng đây là những gì bạn có thể sau:

TimeSpan timeNow = DateTime.Now.TimeOfDay; 
TimeSpan trimmedTimeNow = new TimeSpan(timeNow.Hours, timeNow.Minutes, timeNow.Seconds); 
+1

Tôi thích điều này để đi đến một chuỗi và trở lại. – KeithS

+1

Liên quan đến hiệu suất, tôi nghĩ rằng đề xuất của mrcrowl là tốt hơn so với chuỗi và quay lại. Tôi nghĩ rằng nó là khoảng 9 lần nhanh hơn (cả hai đều nhanh chóng tuy nhiên). –

1

Bạn có thể sử dụng chức năng này để kiểm tra những gì phù hợp với định dạng mà bạn:

DateTime.Now.GetDateTimeFormats(); 

này sẽ cung cấp cho bạn tất cả các định dạng như:

  • "14/05/2011"
  • "14/05/11"
  • "14.05.11"
  • "14-05-11"
  • "2011-05-14"
  • , vv
0

Bạn có thể làm this-

DateTime.Parse(
       DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"), 
       System.Globalization.CultureInfo.CurrentCulture 
      ); 

Làm việc cho tôi :).

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