2009-03-03 62 views
5

Tôi có một giá trị phút và tôi muốn có tới 2 chuỗi giá trị một với bao nhiêu giờ và khác với biên bản, ví dụ:Xây phút và giờ

Value - 121 phút giờ

chuỗi = 2
chuỗi phút = 1

Value - phút 58

giờ string = 0
chuỗi phút = 58

Làm cách nào tôi có thể thực hiện điều này trong C#?

Trả lời

34
var span = System.TimeSpan.FromMinutes(121); 
var hours = ((int)span.TotalHours).ToString();  
var minutes = span.Minutes.ToString(); 

Các ToString() là bởi vì bạn hỏi cho các giá trị chuỗi ...

TotalHours là giờ hoàn thành trong TimeSpan, họ có thể có nhiều hơn 24 (trong khi "Giờ" lĩnh vực có tối đa 24)

Ồ, và suy nghĩ thứ hai: Tại sao sử dụng TimeSpan và không tự tính toán? Bởi vì TimeSpan đã được gỡ lỗi & được kiểm tra bởi Microsoft, nó có một giao diện sạch đẹp (xem mã bạn dễ dàng thấy những gì đang xảy ra mà không cần phải theo dõi tính toán) và nó dễ dàng mở rộng đến các giải pháp khác. (Có các đầu vào trong giây Sử dụng TimeSpan.FromSeconds() Muốn những ngày Sử dụng span.TotalDays ...?.?)

Cập nhật:

Tôi chỉ nhận thấy sai lầm trong câu trả lời của tôi: TotalHours lợi nhuận một giá trị phân số của tất cả các giờ, vì vậy chúng tôi phải cắt ngắn nó thành một số nguyên trước khi chuyển đổi nó thành một chuỗi.

+0

Thao tác này sẽ không ghi phút bằng số không. Thêm ToString ("00") nên sửa chữa nó. – Coincoin

+0

@Coincoin: xem ví dụ của OP trong 121 phút. Không cần đệm. –

+0

Sai lầm của tôi. Cảm ơn đã chỉ ra điều đó. – Coincoin

2
int value = 121; 
int hours = value/60; // 2 
int minutes = value % 60; // 1 

string strHours = hours.ToString(); 
string strMinutes = minutes.ToString(); 
+0

Sử dụng TimeSpan là cách OO, nhưng điều này ngắn và ngọt. – spoulson

+0

Tôi nhìn vào TimeSpan bằng cách sử dụng Reflector: tất cả các kết quả được tính bằng phép nhân mili giây được đánh dấu. Tôi tin rằng phương pháp của tôi có thể nhanh hơn! – abatishchev

8

Sử dụng cấu trúc Thời gian và phương pháp Parse.

+0

Anh ta nói anh ta có một phút và muốn chuyển đổi nó thành chuỗi, không phải theo cách khác. – froh42

+0

Thời gian vẫn là con đường để đi. –

1
int value = 121; 
int hours = value/60; 
int minutes = value % 60; 
+0

Tại sao lại là downvote? Đây là một cách hoàn toàn hợp lệ để nhận được giờ/phút từ tổng giá trị phút và giống như câu trả lời của abatishchev ngoại trừ .ToString() 's – CraigTP

+0

+1 để chống lại -1 – Davy8

+0

Tôi không -1 ai :) –

0
int value = 121; 
TimeSpan timeSpan = TimeSpan.FromMinutes(value); 

// gives you the rounded down value of 2 
int hours = timeSpan.Hours; 

// gives you the minutes left of the hour 
int minutes = value - (hours * 60); 
+0

Tại sao không sử dụng TimeSpan.Minutes ở đây? Điều này sẽ trả về 1 trong trường hợp này, trái ngược với TimeSpan.TotalMinutes trả về 121 –

+0

Thực ra, TotalMinutes trả về gấp đôi có thể trả lại 121,3523 hoặc một số nếu bạn đang làm một sự khác biệt trong ngày. Mà, có, sẽ được đúc xuống 121 nếu bạn đang đúc đến một Int32. TimeSpam.Minutes Tôi không kiểm tra. Nhưng, nếu nó trả về "1" thay vì "121", thì đó là nó. – eduncan911

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