我已經寫在.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