【发布时间】:2013-04-04 04:35:26
【问题描述】:
我有一个具有 2 个日期属性的类:FirstDay 和 LastDay。 LastDay 可以为空。我想生成一个"x year(s) y day(s)" 格式的字符串。如果总年份小于 1,我想省略年份部分。如果总天数小于 1,我想省略天部分。如果年或日为 0,则应分别表示“日/年”,而不是“日/年”。
示例:
2.2 年: “2 年 73 天”
1.002738 年:“1 年 1 天”
0.2 年: “73 天”
2 年: “2 年”
我有什么作品,但是很长:
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# .net formatting .net-4.5 timespan