private static DateTime ParseDateSlow(char[] buf, TextReader reader) { int foundAt = 4; for (; foundAt < buf.Length; foundAt++) { if (buf[foundAt] == '-') { break; } } if (foundAt == buf.Length) { throw new NotSupportedException("Invalid date value."); } var year = IntConverter.ParsePositive(buf, 0, foundAt); var newBuf = new char[5]; for (int i = foundAt + 1; i < buf.Length; i++) { newBuf[i - foundAt - 1] = buf[i]; } for (int i = buf.Length - foundAt - 1; i < 5; i++) { newBuf[i] = (char)reader.Read(); } return(new DateTime(year, IntConverter.ParsePositive(newBuf, 0, 2), IntConverter.ParsePositive(newBuf, 3, 5))); }
private static DateTime ParseDate(TextReader reader, int cur) { //TODO: BC after date for year < 0 ... not supported by .NET if (cur == '\\' || cur == '"') { throw new NotSupportedException("Negative dates are not supported by .NET."); } var buf = new char[10]; buf[0] = (char)cur; var read = reader.Read(buf, 1, 9); if (read != 9) { for (int i = read + 1; i < 10; i++) { buf[i] = (char)reader.Read(); } } if (buf[4] != '-') { return(ParseDateSlow(buf, reader)); } return(new DateTime(IntConverter.ParsePositive(buf, 0, 4), IntConverter.ParsePositive(buf, 5, 7), IntConverter.ParsePositive(buf, 8, 10))); }