crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Прочитать строки в utf8 из бинарного файла
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
iddqd Дата 28.7.2010, 20:33
 
Цитата(BRE @ 28.7.2010, 21:28) *


Ясно. Просто уведомлений никаких не приходило... В таком случае продолжим обсуждение там.
BRE Дата 28.7.2010, 20:28
 
Цитата(iddqd @ 28.7.2010, 19:53) *
Видимо из-за произошедшего сбоя потерялась часть сообщений в теме.

Тему разделили: http://www.forum.crossplatform.ru/index.ph...=5286&st=10

Цитата(iddqd @ 28.7.2010, 19:53) *
Дата должна получиться следующая - 06.02.1960

А не 16.02.1960?
Хотя, возможно, нужно учитывать погрешность на продолжительность солнечных суток.
iddqd Дата 28.7.2010, 18:53
  Видимо из-за произошедшего сбоя потерялась часть сообщений в теме. Я попытался восстановить по имеющимся уведомлениям об ответах:

maint
Цитата
Цитата
Цитата(iddqd @ 20.7.2010, 15:36) Есть дата, хранящаяся в микросекундах в виде int64.
Как правильнее и быстрее преобразовать её в QDate/QDateTime ?
Пробовал QDateTime::addMSecs(), не это не то, так как результат в дебаггере показывает 1531 год :blink:

по моему так
void QDateTime::setTime_t ( uint seconds )
Sets the date and time given the number of seconds that have passed since 1970-01-01T00:00:00, Coordinated Universal Time (Qt::UTC). On systems that do not support time zones this function will behave as if local time were Qt::UTC.



Litkevich Yuriy
Цитата
iddqd, возможно дата в Unix-формате, тогда используй:
http://doc.crossplatform.ru/qt/4.5.0/qdate...html#fromTime_t (QDateTime QDateTime::fromTime_t ( uint seconds ) [static])
ну а из него уже получишь только дату


iddqd
Цитата
Дата может быть как до 1970, так и после 1970 года.


SABROG
Цитата
Цитата
Цитата(iddqd @ 21.7.2010, 17:01)
SABROG, год должен получиться 1960-й

Правильно, чуток не верно посчитал:

61855747200000000 / 1000 = 61855747200000 // переводим в миллисекунды
61855747200000 / 1000 = 61855747200 // переводим в секунды

365.2424 * 24 * 60 * 60 = 31556943.36 // вычисляем количество секунд в году Грегорианского календаря

61855747200 / 31556943.36 = 1960.1 // получаем количество лет
4,13821440 - остаток 4 секунды.

То есть судя по маленькому остатку у тебя в базе почти ровная дата 01-01-1960 00:00:04


---

Дата должна получиться следующая - 06.02.1960
Вопрос остаётся открытым, декодировать так и не получилось пока что...
Алексей1153 Дата 18.7.2010, 17:41
  DEADHUNT, для меня это одно и то же. Кстати, ещё ни разу не приходилось std::string применять :)

А в этом примере я условился, что принимается по ссылке именно вектор.

Это вообще дело вкуса и граблей за плечами (так как я немного рассеянный, я всячески себя подстраховываю)
DEADHUNT Дата 18.7.2010, 16:40
 
Цитата(Алексей1153 @ 18.7.2010, 16:58) *
std::vector<char> label(labelLen+1,0);
in.readRawData(label);//функция принимает вектор по ссылке, к примеру
//понадеялись на совесть функции//label[label.size()-1] = '\0';
out << &label[0] << "\n";//программа сдохла

то есть readRawData считает >= labelLen+1? вообще здесь лучше просто string использовать.
Алексей1153 Дата 18.7.2010, 15:58
  DEADHUNT, тут код очень маленький и запутаться просто негде. Но, что бы там не было наколбашено, обеспечиваем, что строка заканчивается на zero-terminator. Вот другой пример:

std::vector<char> label(labelLen+1,0);
in.readRawData(label);//функция принимает вектор по ссылке, к примеру
//понадеялись на совесть функции//label[label.size()-1] = '\0';
out << &label[0] << "\n";//программа сдохла

DEADHUNT Дата 18.7.2010, 15:11
 
Цитата(Алексей1153 @ 18.7.2010, 15:54) *
DEADHUNT, зато надёжно. А на скорости это не скажется

что значит надёжно, ты считаешь тот код не детерминированным? при конструировании вектора ты задаёшь его длину и начальные значения.
Алексей1153 Дата 18.7.2010, 14:54
  DEADHUNT, зато надёжно. А на скорости это не скажется
DEADHUNT Дата 18.7.2010, 11:21
 
Цитата(Алексей1153 @ 18.7.2010, 7:00) *
label[label.size()-1] = '\0';

бесполезно, т. к. ты уже инициализировал вектор нулями.
Алексей1153 Дата 18.7.2010, 6:00
  а лучше так
std::vector<char> label(labelLen+1,0);
in.readRawData(&label[0],label.size()-1);
label[label.size()-1] = '\0';

out << &label[0] << "\n";


и не забудешь delete вызвать
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 10.5.2024, 16:24