【问题标题】:Humanizer for DateTime日期时间的人性化器
【发布时间】:2021-09-20 10:11:55
【问题描述】:

我有这个代码:

Configurator.DateTimeHumanizeStrategy = new PrecisionDateTimeHumanizeStrategy(.75);
var dateTime1 = DateTime.UtcNow.AddYears(2).AddMonths(-5);
var text1 = dateTime1.Humanize();

在 text1 变量中,我得到“一年后”。但这不是很准确。有没有办法得到“从现在起一年零七个月”?

更新 1:

解决方案@Daniel Hoffman 有一些问题,例如如果我的日期是过去的:

//UtcNow is 11.07.2021
var dateTime6 = new DateTime(2021, 4, 24);
TimeSpan dateTimeSpan6 = dateTime6 - DateTime.UtcNow;
var text6 = dateTime6.Humanize();
string textSpan6 = dateTimeSpan6.Humanize(maxUnit: TimeUnit.Year, precision: 2);

然后我得到“2 个月,11 周”,其中包含两次基本相同的信息,但单位不同。

更新 2:

我已经通过使用 Duration() 方法解决了过去日期的问题:

var timeSpan = date - DateTime.UtcNow;

return timeSpan.Duration().Humanize(maxUnit: TimeUnit.Year, precision: 2, minUnit: TimeUnit.Day);

【问题讨论】:

标签: c# humanizer


【解决方案1】:

目前在 Humanizer 中似乎不可能做你想做的事。

在第 102 行查看此方法PrecisionHumanize(),如果天数超过 365,则仅返回 。总的来说,似乎只能返回一种类型的 时间长度,没有 yearsmonthsminutes 和 ,只是最大的一个

但请查看另一个名为 NodaTime 的库,它可能能够满足您的需求。

这里是link,用于回答与您类似的不同问题。

【讨论】:

    【解决方案2】:

    [编辑]:使用 TimeSpan 将允许您指定经期的精确度,但您将无法拥有“昨天”或 “明天”,它省略了“以前”或“从现在开始”,所有这些都是 本地化。 部分解决方法是使用 TimeSpan.Humanize TimeSpan 小于 366 天和 DateTime.Humanize 的方法 否则。如果它只用于一种语言,用户 可以根据时间跨度附加适当的文本 否定的。

    您可以将精度参数与 TimeSpan 一起使用:

    TimeSpan periodFromNow = DateTime.UtcNow.AddYears(2).AddMonths(-5) - DateTime.UtcNow;
    

    然后:

    string myPeriodFromNow = periodFromNow.Humanize(maxUnit: TimeUnit.Year, precision: 2);
    

    其他例子:

    TimeSpan.FromDays(486).Humanize(maxUnit: TimeUnit.Year, precision: 7) => "1 year, 3 months, 29 days" // One day further is 1 year, 4 month
    TimeSpan.FromDays(517).Humanize(maxUnit: TimeUnit.Year, precision: 7) => "1 year, 4 months, 30 days" // This month has 30 days and one day further is 1 year, 5 months
    

    另请参阅:https://github.com/Humanizr/Humanizer#humanize-timespan

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多