QDateTime :: fromString не принимает мой QString? - PullRequest
0 голосов
/ 01 октября 2011

У меня есть файл .txt, заполненный такими строками, как показано ниже:

  • 2011-03-03 03.33.13.222 4 2000 Информация БИЗНЕС ... и т. Д. Blabla
  • 2011-03-03 03.33.13.333 4 2000 Информация БИЗНЕС ... и т. Д. Blabla
  • 2011-03-03 03.33.13.444 4 2000 Информация БИЗНЕС ... и т. Д. Blabla

В какой-то момент в моем коде я выполняю вычисления и ищу, где извлекаю только даты из начала каждой строки. Теперь, когда я правильно позиционирован в начале файла, я извлекаю только дату и время (с указанием миллисекунд) "ex: 2011-03-03 03.33.13.444" и преобразую в объект QDateTime.

Предполагая, что мой указатель файла расположен правильно в начале определенной строки, с readLine я читаю текстовую строку даты и времени и преобразую в объект QDateTime

QDateTime dt;
char lineBuff[1024];
qint64 lineLength;
lineLength=file.readLine(lineBuff, 24); 
dt = QDateTime::fromString(QString(lineBuff),"yyyy-MM-dd HH.mm.ss.zzz");

Это совершенно правильно.

Но вот в чем проблема:

Когда я делаю то же самое, как это:

QDateTime dt;
QByteArray baLine;
char lineBuff[1024];
file.seek(nGotoPos); //QFile, nGotoPos = a position in my file
QString strPrev(baLine); // convert bytearry to qstring -> so i can use mid()

// calculate where the last two newline characters are in that string
int nEndLine = strPrev.lastIndexOf("\n");
int nStartLine = strPrev.lastIndexOf("\n", -2);

QString strMyWholeLineOfTextAtSomePoint = strPrev.mid(nStartLine,nEndLine);
QString strMyDateTime = strMyWholeLineOfTextAtSomePoint.left(24); 

// strMyDateTime in debug mode shows me that it is filled with my string 
// "ex: 2011-03-03 03.33.13.444" 

// THE PROBLEM
// But when i try to covert that string to my QDateTime object it is empty
dt = QDateTime::fromString(strMyDateTime ,"yyyy-MM-dd HH.mm.ss.zzz");

dt.isValid() //false
dt.toString () // "" -> empty ????

НО ЕСЛИ Я ДЕЛАЮ:

dt = QDateTime :: fromString ("2011-03-03 03.33.13.444", "гггг-мм-дд чч.мм.сс.ззз"); Тогда все в порядке.

В чем может быть проблема с моей QString? Мне нужно добавить к strMyDateTime "\ 0" или мне нужны другие преобразования ??

Ответы [ 2 ]

2 голосов
/ 01 октября 2011

В вашей строке есть дополнительные символы, скорее всего, пробел в начале. Ваша строка формата 23 символа, и вы используете левую (24), поэтому должен быть один дополнительный символ. В комментарии к ответу Стивена Чу вы сказали, что при изменении 24 на 23 последний миллисекундный символ пропал, поэтому дополнительный символ должен быть в начале.

2 голосов
/ 01 октября 2011

"2011-03-03 03.33.13.444" на самом деле имеет длину 23 символа, а не 24. Ваша извлеченная строка, вероятно, имеет дополнительный символ в конце?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...