Неизвестное исключение DateTime C # - PullRequest
1 голос
/ 08 января 2009

Данные, которые я отправляю в функцию convertStringToDataSet, равны


<NewDataSet>\r\n  <Table ID="Table1">
                \r\n
                <PATNAME>Doe,JaneN</PATNAME>\r\n
                <LEVEL>175</LEVEL>\r\n
                <WHEN>2007-09-13T23:00:00.0000000-05:00</WHEN>\r\n
                <NOTE>New 180-day low -- ALERT: loss of 11.6 % in 123 days</NOTE>\r\n
                <IS_BAD>32</IS_BAD>\r\n
                <NAME>202a</NAME>\r\n
                <ID>2459</ID>\r\n
                <LASTNAME>Doe</LASTNAME>\r\n
                <FIRSTNAME>Jane</FIRSTNAME>\r\n
                <MIDDLENAME>N</MIDDLENAME>\r\n
            </Table>\r\n  <Table ID="Table2">
                \r\n
                <PATNAME>Face,SmileyE</PATNAME>\r\n
                <LEVEL>124</LEVEL>\r\n
                <WHEN>2007-10-16T23:00:00.0000000-05:00</WHEN>\r\n
                <NOTE>New 180-day low -- ALERT: loss of 14.5 % in 86 days</NOTE>\r\n
                <IS_BAD>32</IS_BAD>\r\n
                <NAME>101b</NAME>\r\n
                <ID>2736</ID>\r\n
                <LASTNAME>Face</LASTNAME>\r\n
                <FIRSTNAME>Smiley</FIRSTNAME>\r\n
                <MIDDLENAME>E</MIDDLENAME>\r\n
            </Table>\r\n</NewDataSet>


private DataSet convertStringToDataSet(string xmlString)
        {
            // Search for datetime values of the format 
            // --> 2004-08-22T00:00:00.0000000-05:00
            string rp = @"(?\d{4}-\d{2}-\d{2})(?T\d{2}:\d{2}:\d{2}.\d{7}-)(?\d{2})(?:\d{2})";
            // Replace UTC offset value

            string fixedString = Regex.Replace( xmlString, rp, new MatchEvaluator( getHourOffset ) );

            DataSet dataSet = new DataSet();
            StringReader stringReader = new StringReader( fixedString );
            dataSet.ReadXml( stringReader );

            return dataSet;
        }

        private static string getHourOffset( Match m )
        {
            // Need to also account for Daylights Savings 
            // Time when calculating UTC offset value
            string Date=m.Result( "${date}" );
            DateTime dtLocal = DateTime.Parse( m.Result( "${date}" ) );
            DateTime dtUTC = dtLocal.ToUniversalTime();
            int hourLocalOffset = dtUTC.Hour - dtLocal.Hour;
            int hourServer = int.Parse( m.Result( "${hour}" ) );
            string newHour = ( hourServer + ( hourLocalOffset - 
                hourServer ) ).ToString( "0#" );
            string retString = m.Result( "${date}" + "${time}" +
                newHour + "${last}" );

            return retString;
        }

Исключение, которое я получаю Строка не была распознана как допустимый DateTime. Есть неизвестное слово, начинающееся с индекса 2.

Ответы [ 2 ]

2 голосов
/ 08 января 2009

DateTime.Parse попробует все виды различных шаблонов. Предполагая, что у вас есть явный формат, я бы использовал DateTime.ParseExact - чтобы вы знали, что он ищет.

И, как сказал Лассевк, посмотрите на строку, прежде чем пытаться ее проанализировать.

0 голосов
/ 08 января 2009

Вы отладили его и поставили там точку останова, чтобы убедиться, что полученная строка действительно соответствует ожидаемой?

Также это:

m.Result( "${date}" )

Где определена эта группа?

Я бы разделил извлечение найденного регулярного выражения в строку, а затем преобразовал бы его. Это позволит вам установить точку останова и проверить найденное значение.

...