在.NETMF 4.0中解析RFC822-Datetime

我有一个用.NETMF编写的应用程序,它要求我能够解析RFC822-Datetime。

通常,这很容易,但NETMF没有DateTime.parse()方法,也没有某种模式匹配实现,所以我几乎被卡住了。

有任何想法吗?

编辑:可能需要“智能”解决方案。 这很困难的部分原因是所讨论的日期时间倾向于在其中有额外的空间(但有时只是)。 一个简单的子字符串解决方案可能会在某一天工作,但是当日期时间在某些部分之间有一个额外的空间时,它会失败。 我无法控制日期时间,它来自NOAA。

好的字符串操作:

太阳,2010年6月6日20:07:44 +0000
           1 2 3
 0123456789012345678901234567890
string x = Sanitize(" Sun, 06 \t Jun 2010 \r\n 20:07:44 +0000 "); int day = int.Parse(x.Substring(5, 2)); int month = Array.IndexOf(months, x.Substring(8, 3)) + 1; int year = int.Parse(x.Substring(12, 4)); int hour = int.Parse(x.Substring(17, 2)); int minute = int.Parse(x.Substring(20, 2)); int second = int.Parse(x.Substring(23, 2)); int offsetSgn = (x[26] == "-") ? -1 : 1; int offsetHour = int.Parse(x.Substring(27, 2)); int offsetMinute = int.Parse(x.Substring(29, 2)); DateTime result = new DateTime(year, month, day, hour, minute, second, 0); TimeSpan offset = new TimeSpan(offsetHour, offsetMinute, 0); // TODO: add offset... 

 string[] months = new string[12]; months[0] = "Jan"; months[1] = "Feb"; months[2] = "Mar"; months[3] = "Apr"; months[4] = "May"; months[5] = "Jun"; months[6] = "Jul"; months[7] = "Aug"; months[8] = "Sep"; months[9] = "Oct"; months[10] = "Nov"; months[11] = "Dec"; 

 string Sanitize(string s) { if (s == null) { return null; } char[] buffer = new char[s.Length]; int pos = 0; bool inSpace = true; for (int i = 0; i < s.Length; i++) { if (s[i] == ' ' || s[i] == '\t' || s[i] == '\r' || s[i] == '\n') { if (!inSpace) { buffer[pos] = ' '; pos++; inSpace = true; } } else { buffer[pos] = s[i]; pos++; inSpace = false; } } return new string(buffer, 0, pos); }