-
C#教程之开源项目Humanizer介绍(3)
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
1.Ordinalize() => "1st" 5.Ordinalize() => "5th"
您还可以在数字字符串上调用Ordinalize并获得相同的结果:“ 21” .Ordinalize()=>“ 21st”
序数化还支持两种形式的语法性别。 您可以将一个参数传递给Ordinalize,以指定数字应以哪种性别输出。可能的值为GrammaticalGender.Masculine,GrammmicalGender.Feminine和GrammaticalGender.Neuter:
// for Brazilian Portuguese locale 1.Ordinalize(GrammaticalGender.Masculine) => "1º" 1.Ordinalize(GrammaticalGender.Feminine) => "1ª" 1.Ordinalize(GrammaticalGender.Neuter) => "1º" "2".Ordinalize(GrammaticalGender.Masculine) => "2º" "2".Ordinalize(GrammaticalGender.Feminine) => "2ª" "2".Ordinalize(GrammaticalGender.Neuter) => "2º"
显然,这仅适用于某些文化。 对于其他通过性别或根本不通过的人,结果没有任何区别。
标题化
Titleize将输入的单词转换为Title大小写; 等效于“某些标题”。Humanize(LetterCasing.Title)
Pascalize
Pascalize将输入的单词转换为UpperCamelCase,还删除下划线和空格:
"some_title for something".Pascalize() => "SomeTitleForSomething"
Camelize
Camelize的行为与Pascalize相同,但第一个字符为小写:
"some_title for something".Camelize() => "someTitleForSomething"
下划线
Underscore
用下划线分隔输入的单词:
"SomeTitle".Underscore() => "some_title"
Dasherize & Hyphenate
Dasherize和Hyphenate用下划线替换下划线:
"some_title".Dasherize() => "some-title" "some_title".Hyphenate() => "some-title"
"SomeText".Kebaberize() => "some-text"
13、流利的日期
Humanizer提供了一种流利的API来处理DateTime和TimeSpan,如下所示:
TimeSpan方法:
2.Milliseconds() => TimeSpan.FromMilliseconds(2) 2.Seconds() => TimeSpan.FromSeconds(2) 2.Minutes() => TimeSpan.FromMinutes(2) 2.Hours() => TimeSpan.FromHours(2) 2.Days() => TimeSpan.FromDays(2) 2.Weeks() => TimeSpan.FromDays(14)
每月或一年都没有流利的API,因为一个月可能有28到31天,一年可能是365或366天。
您可以使用这些方法来替换
DateTime.Now.AddDays(2).AddHours(3).AddMinutes(-5)
用
DateTime.Now + 2.Days() + 3.Hours() - 5.Minutes()
还可以使用三类流利的方法来处理DateTime:
In.TheYear(2010) // Returns the first of January of 2010 In.January // Returns 1st of January of the current year In.FebruaryOf(2009) // Returns 1st of February of 2009 In.One.Second // DateTime.UtcNow.AddSeconds(1); In.Two.SecondsFrom(DateTime dateTime) In.Three.Minutes // With corresponding From method In.Three.Hours // With corresponding From method In.Three.Days // With corresponding From method In.Three.Weeks // With corresponding From method In.Three.Months // With corresponding From method In.Three.Years // With corresponding From method On.January.The4th // Returns 4th of January of the current year On.February.The(12) // Returns 12th of Feb of the current year
和一些扩展方法:
var someDateTime = new DateTime(2011, 2, 10, 5, 25, 45, 125); // Returns new DateTime(2008, 2, 10, 5, 25, 45, 125) changing the year to 2008 someDateTime.In(2008) // Returns new DateTime(2011, 2, 10, 2, 25, 45, 125) changing the hour to 2:25:45.125 someDateTime.At(2) // Returns new DateTime(2011, 2, 10, 2, 20, 15, 125) changing the time to 2:20:15.125 someDateTime.At(2, 20, 15) // Returns new DateTime(2011, 2, 10, 12, 0, 0) changing the time to 12:00:00.000 someDateTime.AtNoon() // Returns new DateTime(2011, 2, 10, 0, 0, 0) changing the time to 00:00:00.000 someDateTime.AtMidnight()
显然,您也可以将这些方法链接在一起。 例如 2010年11月13日在中午+ 5分钟()
14、数字到数字
Humanizer提供了一种流畅的API,该API以更清晰的方式生成(通常是很大的)数字:
1.25.Billions() => 1250000000 3.Hundreds().Thousands() => 300000
15、数字到单词
Humanizer可以使用ToWords扩展名将数字更改为单词:
1.ToWords() => "one" 10.ToWords() => "ten" 11.ToWords() => "eleven" 122.ToWords() => "one hundred and twenty-two" 3501.ToWords() => "three thousand five hundred and one"
您还可以将第二个参数GrammaticalGender传递给ToWords,以指定应该输出数字的性别。可能的值为GrammaticalGender.Masculine,GrammaticalGender.Feminine和GrammaticalGender.Neuter:
// for Russian locale 1.ToWords(GrammaticalGender.Masculine) => "один" 1.ToWords(GrammaticalGender.Feminine) => "одна" 1.ToWords(GrammaticalGender.Neuter) => "одно"
// for Arabic locale 1.ToWords(GrammaticalGender.Masculine) => "واحد" 1.ToWords(GrammaticalGender.Feminine) => "واحدة" 1.ToWords(GrammaticalGender.Neuter) => "واحد" (-1).ToWords() => "ناقص واحد"
显然,这仅适用于某些文化。 对于传递性别的其他人来说,结果没有任何区别。
另外,可以明确指定要使用的文化。 如果不是,则使用当前线程的当前UI文化。 这是一个例子:
11.ToWords(new CultureInfo("en")) => "eleven" 1.ToWords(GrammaticalGender.Masculine, new CultureInfo("ru")) => "один"
16、数字到序数词
这是将ToWords与Ordinalize混合在一起的一种。 您可以在数字上调用ToOrdinalWords以获得数字中单词的序号表示! 例如:
0.ToOrdinalWords() => "zeroth" 1.ToOrdinalWords() => "first" 2.ToOrdinalWords() => "second" 8.ToOrdinalWords() => "eighth" 10.ToOrdinalWords() => "tenth" 11.ToOrdinalWords() => "eleventh" 12.ToOrdinalWords() => "twelfth" 20.ToOrdinalWords() => "twentieth" 21.ToOrdinalWords() => "twenty first" 121.ToOrdinalWords() => "hundred and twenty first"
ToOrdinalWords也支持语法性别。 您可以将第二个参数传递给ToOrdinalWords以指定输出的性别。 可能的值为GrammaticalGender.Masculine,GrammmicalGender.Feminine和GrammaticalGender.Neuter:
// for Brazilian Portuguese locale 1.ToOrdinalWords(GrammaticalGender.Masculine) => "primeiro" 1.ToOrdinalWords(GrammaticalGender.Feminine) => "primeira" 1.ToOrdinalWords(GrammaticalGender.Neuter) => "primeiro" 2.ToOrdinalWords(GrammaticalGender.Masculine) => "segundo" 2.ToOrdinalWords(GrammaticalGender.Feminine) => "segunda" 2.ToOrdinalWords(GrammaticalGender.Neuter) => "segundo"
// for Arabic locale 1.ToOrdinalWords(GrammaticalGender.Masculine) => "الأول" 1.ToOrdinalWords(GrammaticalGender.Feminine) => "الأولى" 1.ToOrdinalWords(GrammaticalGender.Neuter) => "الأول" 2.ToOrdinalWords(GrammaticalGender.Masculine) => "الثاني" 2.ToOrdinalWords(GrammaticalGender.Feminine) => "الثانية" 2.ToOrdinalWords(GrammaticalGender.Neuter) => "الثاني"
显然,这仅适用于某些文化。 对于传递性别的其他人来说,结果没有任何区别。
另外,可以明确指定要使用的文化。 如果不是,则使用当前线程的当前UI文化。 这是一个例子:
10.ToOrdinalWords(new CultureInfo("en-US")) => "tenth" 1.ToOrdinalWords(GrammaticalGender.Masculine, new CulureInfo("pt-BR")) => "primeiro"
17、日期时间到序数词
这是Ordinalize的扩展
// for English UK locale new DateTime(2015, 1, 1).ToOrdinalWords() => "1st January 2015" new DateTime(2015, 2, 12).ToOrdinalWords() => "12th February 2015" new DateTime(2015, 3, 22).ToOrdinalWords() => "22nd March 2015" // for English US locale new DateTime(2015, 1, 1).ToOrdinalWords() => "January 1st, 2015" new DateTime(2015, 2, 12).ToOrdinalWords() => "February 12th, 2015" new DateTime(2015, 3, 22).ToOrdinalWords() => "March 22nd, 2015"
ToOrdinalWords也支持语法大小写。 您可以将第二个参数传递给ToOrdinalWords以指定输出的大小写。 可能的值是GrammaticalCase.Nominative,GrammmicalCase.Genitive,GrammmicalCase.Dative,GrammmicalCase.Accusative,GrammmicalCase.Instrumental和GraammaticalGender。介词:
显然,这仅适用于某些文化。 对于其他人来说,通过案例不会对结果产生任何影响。
18、罗马数字
Humanizer可以使用ToRoman扩展名将数字更改为罗马数字。 数字1到10可以用罗马数字表示如下:
1.ToRoman() => "I" 2.ToRoman() => "II" 3.ToRoman() => "III" 4.ToRoman() => "IV" 5.ToRoman() => "V" 6.ToRoman() => "VI" 7.ToRoman() => "VII" 8.ToRoman() => "VIII" 9.ToRoman() => "IX" 10.ToRoman() => "X"
也可以使用FromRoman扩展名进行反向操作。
"I".FromRoman() => 1 "II".FromRoman() => 2 "III".FromRoman() => 3 "IV".FromRoman() => 4 "V".FromRoman() => 5
请注意,只有小于4000的整数才能转换为罗马数字。
1d.ToMetric() => "1" 1230d.ToMetric() => "1.23k" 0.1d.ToMetric() => "100m"
也可以使用FromMetric扩展进行相反的操作。
1d.ToMetric() => "1" 1230d.ToMetric() => "1.23k"