Skip to content

Commit 4f53a2f

Browse files
franknortonandersnm
authored andcommitted
Fixed date formatting not taking Am/PM into account correctly. More test cases. Updated .Net Core on test project
1 parent ba055b3 commit 4f53a2f

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

src/ExcelNumberFormat/Formatter.cs

+6-2
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ private static string FormatTimeSpan(TimeSpan timeSpan, List<string> tokens, Cul
129129

130130
private static string FormatDate(DateTime date, List<string> tokens, CultureInfo culture)
131131
{
132+
var containsAmPm = tokens.Contains("AM/PM") || tokens.Contains("A/P");
132133
var result = new StringBuilder();
133134
for (var i = 0; i < tokens.Count; i++)
134135
{
@@ -200,7 +201,10 @@ private static string FormatDate(DateTime date, List<string> tokens, CultureInfo
200201
else if (token.StartsWith("h", StringComparison.OrdinalIgnoreCase))
201202
{
202203
var digits = token.Length;
203-
result.Append(date.Hour.ToString("D" + digits));
204+
if(containsAmPm)
205+
result.Append(date.ToString("%h"));
206+
else
207+
result.Append(date.Hour.ToString("D" + digits));
204208
}
205209
else if (token.StartsWith("s", StringComparison.OrdinalIgnoreCase))
206210
{
@@ -234,7 +238,7 @@ private static string FormatDate(DateTime date, List<string> tokens, CultureInfo
234238
}
235239
else if (string.Compare(token, "a/p", StringComparison.OrdinalIgnoreCase) == 0)
236240
{
237-
var ampm = date.ToString("t", CultureInfo.InvariantCulture);
241+
var ampm = date.ToString("%t", CultureInfo.InvariantCulture);
238242
if (char.IsUpper(token[0]))
239243
{
240244
result.Append(ampm.ToUpperInvariant());

test/ExcelNumberFormat.Tests/Class1.cs

+3
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ public void TestDate()
130130
Test(new DateTime(2010, 9, 26), "m/d/yy", "9/26/10");
131131
Test(new DateTime(2010, 9, 26, 12, 34, 56, 123), "m/d/yy hh:mm:ss.000", "9/26/10 12:34:56.123");
132132
Test(new DateTime(2010, 9, 26, 12, 34, 56, 123), "YYYY-MM-DD HH:MM:SS", "2010-09-26 12:34:56");
133+
Test(new DateTime(2020, 1, 1, 14, 35, 55), "m/d/yyyy\\ h:mm:ss AM/PM;@", "1/1/2020 2:35:55 PM");
134+
Test(new DateTime(2020, 1, 1, 14, 35, 55), "m/d/yyyy\\ h:mm:ss A/P;@", "1/1/2020 2:35:55 P");
135+
Test(new DateTime(2020, 1, 1, 14, 35, 55), "m/d/yyyy\\ h:mm:ss;@", "1/1/2020 14:35:55");
133136
}
134137

135138
[TestMethod]

test/ExcelNumberFormat.Tests/ExcelNumberFormat.Tests.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netcoreapp1.0</TargetFramework>
4+
<TargetFramework>netcoreapp2.2</TargetFramework>
55
</PropertyGroup>
66

77
<ItemGroup>

0 commit comments

Comments
 (0)