我已经写在.NETMF一个应用程序,需要我能够解析RFC822,日期时间。解析RFC822,日期时间在.NETMF 4.0
通常情况下,这将是容易的,但NETMF没有DateTime.parse()方法,也不具有某种匹配的实现模式的,所以我非常坚持。
任何想法?
编辑:很可能需要“智能”的解决方案。部分原因很难,就是所讨论的日期时间有一种倾向,即有时候会有额外的空间。一个简单的子字符串解决方案可能有一天会工作,但当日期时间在部分之间有额外的空间时会失败。我无法控制日期,它来自NOAA。
我已经写在.NETMF一个应用程序,需要我能够解析RFC822,日期时间。解析RFC822,日期时间在.NETMF 4.0
通常情况下,这将是容易的,但NETMF没有DateTime.parse()方法,也不具有某种匹配的实现模式的,所以我非常坚持。
任何想法?
编辑:很可能需要“智能”的解决方案。部分原因很难,就是所讨论的日期时间有一种倾向,即有时候会有额外的空间。一个简单的子字符串解决方案可能有一天会工作,但当日期时间在部分之间有额外的空间时会失败。我无法控制日期,它来自NOAA。
好醇”字符串操作:
Sun, 06 Jun 2010 20:07:44 +0000 1 2 3
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);
}
这很好,但我忘记提及的一点是,我已经知道我解析的日期时间有时会有额外的空格(不要问,它是NOAA XML METAR,我不知道WTF)。我在PHP中有一个解决方案,可以智能地通过并试图找出每个dt的部分。我想如果我不能这样做,像这样的解决方案是我唯一的选择,但我希望NETMF甚至有一个简单的模式匹配类。 – chris12892 2010-06-06 20:20:17
只需使用string.Replace(“”,“”)zap所有空格 – 2010-06-06 20:24:54
空格是唯一的删除符,因此将它们全部切换不是选项。这只会使问题变得更糟,如果没有适当的模式匹配实现,也许就不可能。 编辑:哦,等等,我明白你的观点。是的,这也可能是一个选择。 – chris12892 2010-06-06 20:32:41
有趣的问题。 MF非常渺茫,而你尝试的OSS的99.95%将无法编译。真正感兴趣的是对此的回复。 – 2010-06-06 20:13:59