Skip to content

Commit

Permalink
Use the formal way of expressing time
Browse files Browse the repository at this point in the history
  • Loading branch information
louis-z committed Dec 16, 2021
1 parent 40926da commit 5356f7a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 25 deletions.
Expand Up @@ -2,8 +2,6 @@

using System;
using Xunit;
using Humanizer.Localisation.TimeToClockNotation;
using Humanizer;

namespace Humanizer.Tests.Localisation.fr
{
Expand All @@ -12,19 +10,21 @@ public class TimeToClockNotationTests
{
[Theory]
[InlineData(00, 00, "minuit")]
[InlineData(01, 00, "une heure")]
[InlineData(00, 07, "minuit sept")]
[InlineData(01, 11, "une heure onze")]
[InlineData(04, 00, "quatre heures")]
[InlineData(05, 01, "cinq heures une")]
[InlineData(06, 05, "six heures cinq")]
[InlineData(07, 10, "sept heures dix")]
[InlineData(08, 15, "huit heures et quart")]
[InlineData(08, 15, "huit heures quinze")]
[InlineData(09, 20, "neuf heures vingt")]
[InlineData(10, 25, "dix heures vingt-cinq")]
[InlineData(11, 30, "onze heures et demie")]
[InlineData(11, 30, "onze heures trente")]
[InlineData(12, 00, "midi")]
[InlineData(12, 38, "midi trente-huit")]
[InlineData(15, 35, "quinze heures trente-cinq")]
[InlineData(16, 40, "dix-sept heures moins vingt")]
[InlineData(17, 45, "dix-huit heures moins le quart")]
[InlineData(16, 40, "seize heures quarante")]
[InlineData(17, 45, "dix-sept heures quarante-cinq")]
[InlineData(18, 50, "dix-huit heures cinquante")]
[InlineData(19, 55, "dix-neuf heures cinquante-cinq")]
[InlineData(20, 59, "vingt heures cinquante-neuf")]
Expand All @@ -36,20 +36,23 @@ public void ConvertToClockNotationTimeOnlyString(int hours, int minutes, string

[Theory]
[InlineData(00, 00, "minuit")]
[InlineData(00, 07, "minuit cinq")]
[InlineData(01, 11, "une heure dix")]
[InlineData(04, 00, "quatre heures")]
[InlineData(05, 01, "cinq heures")]
[InlineData(06, 05, "six heures cinq")]
[InlineData(07, 10, "sept heures dix")]
[InlineData(08, 15, "huit heures et quart")]
[InlineData(08, 15, "huit heures quinze")]
[InlineData(09, 20, "neuf heures vingt")]
[InlineData(10, 25, "dix heures vingt-cinq")]
[InlineData(11, 30, "onze heures et demie")]
[InlineData(11, 30, "onze heures trente")]
[InlineData(12, 00, "midi")]
[InlineData(12, 38, "midi quarante")]
[InlineData(13, 23, "treize heures vingt-cinq")]
[InlineData(14, 32, "quatorze heures et demie")]
[InlineData(14, 32, "quatorze heures trente")]
[InlineData(15, 35, "quinze heures trente-cinq")]
[InlineData(16, 40, "dix-sept heures moins vingt")]
[InlineData(17, 45, "dix-huit heures moins le quart")]
[InlineData(16, 40, "seize heures quarante")]
[InlineData(17, 45, "dix-sept heures quarante-cinq")]
[InlineData(18, 50, "dix-huit heures cinquante")]
[InlineData(19, 55, "dix-neuf heures cinquante-cinq")]
[InlineData(20, 59, "vingt et une heures")]
Expand Down
Expand Up @@ -9,32 +9,25 @@ internal class FrTimeOnlyToClockNotationConverter : ITimeOnlyToClockNotationConv
{
public virtual string Convert(TimeOnly time, ClockNotationRounding roundToNearestFive)
{
switch (time)
{
case { Hour: 0, Minute: 0 }:
return "minuit";
case { Hour: 12, Minute: 0 }:
return "midi";
}

var normalizedMinutes = (int)(roundToNearestFive == ClockNotationRounding.NearestFiveMinutes
? 5 * Math.Round(time.Minute / 5.0)
: time.Minute);

return normalizedMinutes switch
{
00 => GetHourExpression(time.Hour),
15 => $"{GetHourExpression(time.Hour)} et quart",
30 => $"{GetHourExpression(time.Hour)} et demie",
40 => $"{GetHourExpression(time.Hour + 1)} moins vingt",
45 => $"{GetHourExpression(time.Hour + 1)} moins le quart",
60 => $"{GetHourExpression(time.Hour + 1)}",
_ => $"{GetHourExpression(time.Hour)} {normalizedMinutes.ToWords(GrammaticalGender.Feminine)}"
};

static string GetHourExpression(int hour)
{
return hour.ToWords(GrammaticalGender.Feminine) + (hour > 1 ? " heures" : " heure");
return hour switch
{
0 => "minuit",
12 => "midi",
_ => hour.ToWords(GrammaticalGender.Feminine) + (hour > 1 ? " heures" : " heure")
};
}
}
}
Expand Down

0 comments on commit 5356f7a

Please sign in to comment.