Skip to content

Commit 2031a05

Browse files
authored
[.NET Timexlib] Fix timex-to-string conversion of English ordinals 11-13 (#2896)
1 parent 4589775 commit 2031a05

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

.NET/Microsoft.Recognizers.Text.DataTypes.DataDrivenTests/TestTimex.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,17 @@ public void DataTypes_Timex_FromTime()
127127
Assert.AreEqual("T23:59:30", TimexProperty.FromTime(new Time(23, 59, 30)).TimexValue);
128128
}
129129

130+
[TestMethod]
131+
public void DataTypes_Timex_FromDateTime_ToString()
132+
{
133+
var timex = new TimexProperty("2022-03-11");
134+
Assert.AreEqual("11th March 2022", timex.ToString());
135+
timex = new TimexProperty("2022-03-12");
136+
Assert.AreEqual("12th March 2022", timex.ToString());
137+
timex = new TimexProperty("2022-03-13");
138+
Assert.AreEqual("13th March 2022", timex.ToString());
139+
}
140+
130141
private static void Roundtrip(string timex)
131142
{
132143
Assert.AreEqual(timex, new TimexProperty(timex).TimexValue);

.NET/Microsoft.Recognizers.Text.DataTypes.TimexExpression/English/TimexConvertEnglish.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ public static string ConvertDate(TimexProperty timex)
9797
}
9898

9999
var date = timex.DayOfMonth.Value.ToString(CultureInfo.InvariantCulture);
100-
var abbreviation = TimexConstantsEnglish.DateAbbreviation[int.Parse(date[date.Length - 1].ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture)];
100+
var dayOfMonth = int.Parse(date, CultureInfo.InvariantCulture);
101+
102+
// Ordinals 11 to 13 are special in english as they end in th
103+
var abbreviation = TimexConstantsEnglish.DateAbbreviation[(dayOfMonth is > 9 and < 14 ? 9 : dayOfMonth) % 10];
101104

102105
if (timex.Month != null)
103106
{

0 commit comments

Comments
 (0)