crossplatform.ru

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

> FILETIME (Windows), Как перевести FILETIME в строку ?
flankerr
  опции профиля:
сообщение 12.5.2008, 10:47
Сообщение #1


Активный участник
***

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

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




Репутация:   0  


Есть переменная которая содержит виндушный FILETIME как из него в QT получить год\месяц\день и тп.. по отдельности ?:)
разумеется БЕЗ использования виндушных функций.

Сообщение отредактировал flankerr - 12.5.2008, 10:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ViGOur
  опции профиля:
сообщение 12.5.2008, 12:42
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Так:
#include <QtCore/QCoreApplication>

#include <windows.h>
#include <QDateTime>


const QString getDateTime( QDateTime &rdt)
{
    struct timeval p;

    union
    {
        long long ns100; /*time since 1 Jan 1601 in 100ns units */
        FILETIME ft;
    }now;

    GetSystemTimeAsFileTime( &(now.ft) );
    p.tv_usec=(long)((now.ns100 / 10LL) % 1000000LL );
    p.tv_sec= (long)((now.ns100-(116444736000000000LL))/10000000LL);

    rdt.setTime_t( p.tv_sec);

    return rdt.toString();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QDateTime dt;
    qDebug( "%s", qPrintable( getDateTime( dt)));
    
    return a.exec();
}
С Andrew Selivanov сейчас родили... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 12.5.2008, 13:39
Сообщение #3


Активный участник
***

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

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




Репутация:   0  


Цитата(ViGOur @ 12.5.2008, 13:42) *
С Andrew Selivanov сейчас родили... :)

зачем struct timeval p;
?

всё в двух строчках

QDateTime qTime;
qTime.setTime_t((FILETIME - 116444736000000000)/ 10000000);


правда на сколько понял условную компиляци. всё равyо придёться делать

#ifdef WIN32
static UINT64 ui64Shift = 116444736000000000;
#else
static UINT64 ui64Shift = 116444736000000000LL;
#endif

Цитата(ViGOur @ 12.5.2008, 14:23) *
Это стандартный хидер для работы с виндовым API...

Но чтоб его получить надо установить Студию.
а Litkevich Yuriy спрашивал именно где взять

Сообщение отредактировал flankerr - 12.5.2008, 13:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 26.11.2024, 4:44