Skip to content

Commit a6d1ed9

Browse files
committedMar 1, 2025·
Added JST and KST timezone mappings
1 parent 8412af6 commit a6d1ed9

File tree

2 files changed

+67
-1
lines changed

2 files changed

+67
-1
lines changed
 

‎MimeKit/Utils/DateUtils.cs

+2
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ static DateUtils ()
136136
{ "T", -700 }, { "U", -800 }, { "V", -900 },
137137
{ "W", -1000 }, { "X", -1100 }, { "Y", -1200 },
138138
{ "Z", 0 },
139+
// Additional timezone mappings
140+
{ "JST", 900 }, { "KST", 900 },
139141
};
140142

141143
datetok = new DateTokenFlags[256];

‎UnitTests/Utils/DateParserTests.cs

+65-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public class DateParserTests
7474
"Sun, 08 Dec 1991 09:11:00 +0000",
7575
"Sun, 08 Dec 1991 09:11:00 +0000",
7676
"Thu, 26 Dec 1991 20:45:00 +0000",
77-
"Tue, 09 Jun 1992 03:45:24 +0000",
77+
"Tue, 09 Jun 1992 03:45:24 +0900",
7878
"Mon, 17 Jan 1994 11:14:55 -0500",
7979
"Wed, 17 Jan 2001 11:14:55 -0500",
8080
"Tue, 30 Mar 2004 13:01:38 +0000",
@@ -154,5 +154,69 @@ public void TestParseInvalidDates ()
154154
Assert.That (DateUtils.TryParse (invalidDates[i], out _), Is.False, $"Should not have parsed '{invalidDates[i]}'");
155155
}
156156
}
157+
158+
[TestCase ("Wed, 1 Jan 2025 09:00:00 -0500", 1)]
159+
[TestCase ("Sat, 1 Feb 2025 09:00:00 -0500", 2)]
160+
[TestCase ("Sat, 1 Mar 2025 09:00:00 -0500", 3)]
161+
[TestCase ("Tue, 1 Apr 2025 09:00:00 -0500", 4)]
162+
[TestCase ("Thu, 1 May 2025 09:00:00 -0500", 5)]
163+
[TestCase ("Sun, 1 Jun 2025 09:00:00 -0500", 6)]
164+
[TestCase ("Tue, 1 Jul 2025 09:00:00 -0500", 7)]
165+
[TestCase ("Fri, 1 Aug 2025 09:00:00 -0500", 8)]
166+
[TestCase ("Mon, 1 Sep 2025 09:00:00 -0500", 9)]
167+
[TestCase ("Wed, 1 Oct 2025 09:00:00 -0500", 10)]
168+
[TestCase ("Sat, 1 Nov 2025 09:00:00 -0500", 11)]
169+
[TestCase ("Mon, 1 Dec 2025 09:00:00 -0500", 12)]
170+
public void TestMonths (string value, int month)
171+
{
172+
Assert.That (DateUtils.TryParse (value, out var date), Is.True, $"Failed to parse date: {value}");
173+
Assert.That (date.Month, Is.EqualTo (month));
174+
}
175+
176+
[TestCase ("GMT", 0)]
177+
[TestCase ("UTC", 0)]
178+
[TestCase ("EDT", -400)]
179+
[TestCase ("EST", -500)]
180+
[TestCase ("CDT", -500)]
181+
[TestCase ("CST", -600)]
182+
[TestCase ("MDT", -600)]
183+
[TestCase ("MST", -700)]
184+
[TestCase ("PDT", -700)]
185+
[TestCase ("PST", -800)]
186+
[TestCase ("A", 100)]
187+
[TestCase ("B", 200)]
188+
[TestCase ("C", 300)]
189+
[TestCase ("D", 400)]
190+
[TestCase ("E", 500)]
191+
[TestCase ("F", 600)]
192+
[TestCase ("G", 700)]
193+
[TestCase ("H", 800)]
194+
[TestCase ("I", 900)]
195+
[TestCase ("K", 1000)]
196+
[TestCase ("L", 1100)]
197+
[TestCase ("M", 1200)]
198+
[TestCase ("N", -100)]
199+
[TestCase ("O", -200)]
200+
[TestCase ("P", -300)]
201+
[TestCase ("Q", -400)]
202+
[TestCase ("R", -500)]
203+
[TestCase ("S", -600)]
204+
[TestCase ("T", -700)]
205+
[TestCase ("U", -800)]
206+
[TestCase ("V", -900)]
207+
[TestCase ("W", -1000)]
208+
[TestCase ("X", -1100)]
209+
[TestCase ("Y", -1200)]
210+
[TestCase ("Z", 0)]
211+
[TestCase ("JST", 900)]
212+
[TestCase ("KST", 900)]
213+
public void TestTimezones (string zone, int expectedOffset)
214+
{
215+
TimeSpan tzone = new TimeSpan (expectedOffset / 100, Math.Abs (expectedOffset % 100), 0);
216+
var value = string.Format ("Fri, 28 Feb 2025 09:00:00 {0}", zone);
217+
218+
Assert.That (DateUtils.TryParse (value, out var date), Is.True, $"Failed to parse date: {value}");
219+
Assert.That (date.Offset, Is.EqualTo (tzone), $"Parsed date offset does not match: '{date.Offset}' vs '{expectedOffset}'");
220+
}
157221
}
158222
}

0 commit comments

Comments
 (0)
Please sign in to comment.