Author: atsushi
Date: 2005-05-25 02:57:47 -0400 (Wed, 25 May 2005)
New Revision: 44974
Modified:
trunk/mcs/class/corlib/System/ChangeLog
trunk/mcs/class/corlib/System/DateTime.cs
trunk/mcs/class/corlib/Test/System/ChangeLog
trunk/mcs/class/corlib/Test/System/DateTimeTest.cs
Log:
2005-05-25 Atsushi Enomoto <[EMAIL PROTECTED]>
* DateTime.cs : next_not_digit prevented some valid parse.
Just remove it, since now we pass max length to ParseNumber() and
thus it is not needed anymore. Fixed bug 63137.
* DateTimeTest.cs : removed some NotWorking (they are working).
Added testcase for #63137.
Modified: trunk/mcs/class/corlib/System/ChangeLog
===================================================================
--- trunk/mcs/class/corlib/System/ChangeLog 2005-05-25 06:54:32 UTC (rev
44973)
+++ trunk/mcs/class/corlib/System/ChangeLog 2005-05-25 06:57:47 UTC (rev
44974)
@@ -1,3 +1,9 @@
+2005-05-25 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * DateTime.cs : next_not_digit prevented some valid parse.
+ Just remove it, since now we pass max length to ParseNumber() and
+ thus it is not needed anymore. Fixed bug 63137.
+
2005-05-24 Atsushi Enomoto <[EMAIL PROTECTED]>
* DateTime.cs : HH should not always block tt. Fixed bug #60912.
Modified: trunk/mcs/class/corlib/System/DateTime.cs
===================================================================
--- trunk/mcs/class/corlib/System/DateTime.cs 2005-05-25 06:54:32 UTC (rev
44973)
+++ trunk/mcs/class/corlib/System/DateTime.cs 2005-05-25 06:57:47 UTC (rev
44974)
@@ -733,7 +733,6 @@
int digits,
bool leadingzero,
bool sloppy_parsing,
- bool next_not_digit,
out int num_parsed)
{
int number = 0, i;
@@ -758,14 +757,6 @@
return 0;
}
- if (s.Length - valuePos > digits &&
- next_not_digit &&
- Char.IsDigit (s[digits + valuePos])) {
- /* More digits left over */
- num_parsed = -1;
- return(0);
- }
-
for (i = valuePos; i < digits + valuePos; i++) {
char c = s[i];
if (!Char.IsDigit (c)) {
@@ -854,7 +845,6 @@
double fractionalSeconds = -1;
int ampm = -1;
int tzsign = -1, tzoffset = -1, tzoffmin = -1;
- bool next_not_digit;
result = new DateTime (0);
while (pos+num < len)
@@ -955,34 +945,15 @@
int num_parsed = 0;
- if (pos+num+1 < len) {
- char next_char = chars[pos+num+1];
-
- next_not_digit = !(next_char == 'd' ||
- next_char == 'M' ||
- next_char == 'y' ||
- next_char == 'h' ||
- next_char == 'H' ||
- next_char == 'm' ||
- next_char == 's' ||
- next_char == 'f' ||
- next_char == 'z' ||
- next_char == '"' ||
- next_char == '\'' ||
- Char.IsDigit
(next_char));
- } else {
- next_not_digit = true;
- }
-
switch (chars[pos])
{
case 'd':
if (day != -1)
return false;
if (num == 0)
- day = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+ day = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, out num_parsed);
else if (num == 1)
- day = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+ day = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, out num_parsed);
else if (num == 2)
dayofweek = _ParseEnum (s,
valuePos, dfi.AbbreviatedDayNames, out num_parsed);
else
@@ -995,9 +966,9 @@
if (month != -1)
return false;
if (num == 0)
- month = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+ month = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, out num_parsed);
else if (num == 1)
- month = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+ month = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, out num_parsed);
else if (num == 2)
month = _ParseEnum (s,
valuePos, dfi.AbbreviatedMonthNames , out num_parsed) + 1;
else
@@ -1011,14 +982,14 @@
return false;
if (num == 0) {
- year = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+ year = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, out num_parsed);
} else if (num < 3) {
- year = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+ year = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, out num_parsed);
} else {
- year = _ParseNumber (s,
valuePos, 4, false, sloppy_parsing, next_not_digit, out num_parsed);
+ year = _ParseNumber (s,
valuePos, 4, false, sloppy_parsing, out num_parsed);
if ((year >= 1000) &&
(num_parsed == 4) && (!longYear) && (s.Length > 4 + valuePos)) {
int np = 0;
- int ly = _ParseNumber
(s, valuePos, 5, false, sloppy_parsing, next_not_digit, out np);
+ int ly = _ParseNumber
(s, valuePos, 5, false, sloppy_parsing, out np);
longYear = (ly > 9999);
}
num = 3;
@@ -1032,10 +1003,10 @@
if (hour != -1)
return false;
if (num == 0)
- hour = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+ hour = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, out num_parsed);
else
{
- hour = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+ hour = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, out num_parsed);
num = 1;
}
@@ -1049,10 +1020,10 @@
if ((hour != -1) || (ampm >= 0))
return false;
if (num == 0)
- hour = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+ hour = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, out num_parsed);
else
{
- hour = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+ hour = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, out num_parsed);
num = 1;
}
if (hour >= 24)
@@ -1064,10 +1035,10 @@
if (minute != -1)
return false;
if (num == 0)
- minute = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+ minute = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, out num_parsed);
else
{
- minute = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+ minute = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, out num_parsed);
num = 1;
}
if (minute >= 60)
@@ -1078,10 +1049,10 @@
if (second != -1)
return false;
if (num == 0)
- second = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+ second = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, out num_parsed);
else
{
- second = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, next_not_digit, out num_parsed);
+ second = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, out num_parsed);
num = 1;
}
if (second >= 60)
@@ -1092,7 +1063,7 @@
if (fractionalSeconds != -1)
return false;
num = Math.Min (num, 6);
- double decimalNumber = (double)
_ParseNumber (s, valuePos, num+1, true, sloppy_parsing, next_not_digit, out
num_parsed);
+ double decimalNumber = (double)
_ParseNumber (s, valuePos, num+1, true, sloppy_parsing, out num_parsed);
if (num_parsed == -1)
return false;
@@ -1133,12 +1104,12 @@
return false;
valuePos++;
if (num == 0)
- tzoffset = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, next_not_digit, out num_parsed);
+ tzoffset = _ParseNumber (s,
valuePos, 2, false, sloppy_parsing, out num_parsed);
else if (num == 1)
- tzoffset = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, false, out num_parsed);
+ tzoffset = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, out num_parsed);
else
{
- tzoffset = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, false, out num_parsed);
+ tzoffset = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, out num_parsed);
if (num_parsed < 0)
return false;
valuePos += num_parsed;
@@ -1147,7 +1118,7 @@
else if (!_ParseString (s,
valuePos, 0, dfi.TimeSeparator, out num_parsed))
return false;
valuePos += num_parsed;
- tzoffmin = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, false, out num_parsed);
+ tzoffmin = _ParseNumber (s,
valuePos, 2, true, sloppy_parsing, out num_parsed);
if (num_parsed < 0)
return false;
num = 2;
Modified: trunk/mcs/class/corlib/Test/System/ChangeLog
===================================================================
--- trunk/mcs/class/corlib/Test/System/ChangeLog 2005-05-25 06:54:32 UTC
(rev 44973)
+++ trunk/mcs/class/corlib/Test/System/ChangeLog 2005-05-25 06:57:47 UTC
(rev 44974)
@@ -1,3 +1,8 @@
+2005-05-25 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * DateTimeTest.cs : removed some NotWorking (they are working).
+ Added testcase for #63137.
+
2005-05-24 Atsushi Enomoto <[EMAIL PROTECTED]>
* DateTimeTest.cs : testcase for #60912.
Modified: trunk/mcs/class/corlib/Test/System/DateTimeTest.cs
===================================================================
--- trunk/mcs/class/corlib/Test/System/DateTimeTest.cs 2005-05-25 06:54:32 UTC
(rev 44973)
+++ trunk/mcs/class/corlib/Test/System/DateTimeTest.cs 2005-05-25 06:57:47 UTC
(rev 44974)
@@ -353,7 +353,6 @@
}
- [Category ("NotWorking")]
public void TestParseExact3 ()
{
DateTime t1 = DateTime.ParseExact ("2002-02-25 04:25:13Z", "u",
null);
@@ -365,12 +364,18 @@
}
[Test]
- // bug #60912, modified hour as 13:00
public void TestParseExact4 ()
{
+ // bug #60912, modified hour as 13:00
string s = "6/28/2004 13:00:00 AM";
string f = "M/d/yyyy HH':'mm':'ss tt";
DateTime.ParseExact (s, f, CultureInfo.InvariantCulture);
+
+ // bug #63137
+ DateTime.ParseExact ("Wed, 12 May 2004 20:51:09 +0200",
+ @"ddd, d MMM yyyy H:m:s zzz",
+ CultureInfo.CreateSpecificCulture("en-us"),
+ DateTimeStyles.AllowInnerWhite);
}
public void TestParseExact ()
@@ -763,7 +768,6 @@
}
[Test]
- [Category ("NotWorking")]
public void ParseAllowsQueerString ()
{
DateTime.Parse ("Sat,,,,,, 01 Oct 1994 03:00:00",
CultureInfo.InvariantCulture);
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches