crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Преобразовать int64 в QDate
iddqd
  опции профиля:
сообщение 20.7.2010, 9:36
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 32
Регистрация: 26.11.2009
Пользователь №: 1261

Спасибо сказали: 1 раз(а)




Репутация:   0  


Есть дата, хранящаяся в микросекундах в виде int64.
Как правильнее и быстрее преобразовать её в QDate/QDateTime ?
Пробовал QDateTime::addMSecs(), не это не то, так как результат в дебаггере показывает 1531 год :blink:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 20.7.2010, 14:04
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(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.

только округлить до секунд

Сообщение отредактировал maint - 20.7.2010, 14:05
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.7.2010, 14:06
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


iddqd, возможно дата в Unix-формате, тогда используй:
QDateTime QDateTime::fromTime_t ( uint seconds ) [static]
ну а из него уже получишь только дату

чуток опопздал :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
iddqd
  опции профиля:
сообщение 20.7.2010, 14:13
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 32
Регистрация: 26.11.2009
Пользователь №: 1261

Спасибо сказали: 1 раз(а)




Репутация:   0  


Дата может быть как до 1970, так и после 1970 года. Так что эти функции не помогают...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.7.2010, 14:41
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(iddqd @ 20.7.2010, 18:13) *
Дата может быть как до 1970, так и после 1970 года.
ну скажи, как у тебя дата представлена, что собой представляет единица (секунду, час, с каким смещением, ...).
в виде int64 можно хранить какую угодно информацию.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
iddqd
  опции профиля:
сообщение 20.7.2010, 14:43
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 32
Регистрация: 26.11.2009
Пользователь №: 1261

Спасибо сказали: 1 раз(а)




Репутация:   0  


qint64 представляет из себя "a number of microseconds since midnight, January 1st, 0 AD nominal Gregorian.".

Сообщение отредактировал iddqd - 20.7.2010, 14:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 21.7.2010, 10:56
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(iddqd @ 20.7.2010, 15:43) *
AD


AD - Anno Domini (lat), От Рождества Христова

Цитата(iddqd @ 20.7.2010, 10:36) *
Пробовал QDateTime::addMSecs()

Этот метод добавляет миллисекунды, а не микросекунды. 1 миллисекунда = 1000 микросекунд. QDateTime работает от 1970 года, а не от Рождества Христова. Приведи полное значение числа на форуме.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
iddqd
  опции профиля:
сообщение 21.7.2010, 11:40
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 32
Регистрация: 26.11.2009
Пользователь №: 1261

Спасибо сказали: 1 раз(а)




Репутация:   0  


qint64 равно 61855747200000000

в бинарном виде в файле:
00 20 2C 6F 79 C1 DB


читаю как
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in.setByteOrder(QDataStream::LittleEndian);

qint64 b64;
in >> b64;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 21.7.2010, 15:49
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(iddqd @ 21.7.2010, 12:40) *
61855747200000000


1956 год должен получиться или ты результат не можешь проверить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
iddqd
  опции профиля:
сообщение 21.7.2010, 16:01
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 32
Регистрация: 26.11.2009
Пользователь №: 1261

Спасибо сказали: 1 раз(а)




Репутация:   0  


SABROG, год должен получиться 1960-й
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.12.2024, 2:47