Tôi có một lớp học có 2 thuộc tính ngày: FirstDay
và LastDay
. LastDay
không thể thực hiện được. Tôi muốn tạo một chuỗi ở định dạng "x year(s) y day(s)"
. Nếu tổng số năm dưới 1, tôi muốn bỏ qua phần năm. Nếu tổng số ngày nhỏ hơn 1, tôi muốn bỏ qua phần ngày. Nếu năm hoặc ngày là 0, họ phải nói "ngày/năm" thay vì "ngày/năm" tương ứng.Định dạng A TimeSpan Với Năm
Ví dụ:
2.2 năm: "2 năm 73 ngày"
1,002738 năm: "1 năm 1 ngày"
0,2 năm : "73 ngày"
2 năm: "2 năm"
Những gì tôi có tác phẩm, nhưng nó là dài:
private const decimal DaysInAYear = 365.242M;
public string LengthInYearsAndDays
{
get
{
var lastDay = this.LastDay ?? DateTime.Today;
var lengthValue = lastDay - this.FirstDay;
var builder = new StringBuilder();
var totalDays = (decimal)lengthValue.TotalDays;
var totalYears = totalDays/DaysInAYear;
var years = (int)Math.Floor(totalYears);
totalDays -= (years * DaysInAYear);
var days = (int)Math.Floor(totalDays);
Func<int, string> sIfPlural = value =>
value > 1 ? "s" : string.Empty;
if (years > 0)
{
builder.AppendFormat(
CultureInfo.InvariantCulture,
"{0} year{1}",
years,
sIfPlural(years));
if (days > 0)
{
builder.Append(" ");
}
}
if (days > 0)
{
builder.AppendFormat(
CultureInfo.InvariantCulture,
"{0} day{1}",
days,
sIfPlural(days));
}
var length = builder.ToString();
return length;
}
}
Có cách nào ngắn gọn hơn để thực hiện việc này (nhưng vẫn có thể đọc được) không?
http://codereview.stackexchange.com/ – Kashif