Tôi đã tìm kiếm một cơ chế làm tròn thích hợp nhưng không có gì tôi tìm thấy có vẻ là chính xác những gì tôi cần.DateTime Round Up and Down
Tôi cần phải làm tròn và làm tròn một cách riêng biệt và tôi cũng cần tính đến trường hợp đã được làm tròn.
tôi cần làm tròn sau để xảy ra
5:00 -> RoundDown() -> 5:00
5:04 -> RoundDown() -> 5:00
5:09 -> RoundDown() -> 5:00
5:10 -> RoundDown() -> 5:10
4:00 -> RoundUp() -> 4:00
4:50 -> RoundUp() -> 4:50
4:51 -> RoundUp() -> 5:00
4:56 -> RoundUp() -> 5:00
Về cơ bản tôi cần nó để ROUNDUP() hoặc ROUNDDOWN() để 10 phút gần một cách rõ ràng nhưng nó cũng nên để thời gian bị ảnh hưởng nếu nó đã là một bội số trong 10 phút. Ngoài ra tôi muốn cắt bất kỳ giây để rằng họ không có hiệu lực thi hành thủ tục làm tròn
4:50:45 -> 04:50:00 -> ROUNDUP() -> 4:50
Liệu bất cứ ai có bất kỳ mã tiện dụng nào để thực hiện việc này.
Tôi tìm thấy mã này ở đâu đó nhưng nó tròn 5:00 -> RoundUp() -> 5:10 thay vì để nguyên vẹn vì nó đã là bội số của 10 và không cần làm tròn. Ngoài ra, tôi không chắc chắn về số giây sẽ ảnh hưởng đến nó
public static DateTime RoundDateTime(this DateTime dt, int minutes, RoundingDirection direction)
{
TimeSpan t;
switch (direction)
{
case RoundingDirection.Up:
t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes, 0)); break;
case RoundingDirection.Down:
t = (dt.Subtract(DateTime.MinValue)); break;
default:
t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes/2, 0)); break;
}
return DateTime.MinValue.Add(new TimeSpan(0,
(((int)t.TotalMinutes)/minutes) * minutes, 0));
}
Hy vọng ai đó có thể chỉnh sửa phương pháp đó để làm cho nó hoạt động cho tôi. Cảm ơn
OK. Vì vậy, bạn có làm tròn mã ở đó. Tại sao bạn không sửa đổi nó để làm cho nó làm những gì bạn cần làm? –
Điều này có hiệu quả không? http://stackoverflow.com/questions/7029353/c-sharp-round-up-time-to-nearest-x-minutes – comecme
Quy tắc làm tròn của bạn không rõ ràng. Bạn vòng 5:09 đến 5:00 nhưng 4:56 đến 5:00. – Rawling