AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.09.2006, 16:04   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,711 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если еще актуальна тема с Гринвичем, то я определял часовой пояс так:

PHP код:
static void MVB_GetTimeZone(Args _args)
{
    
#define.MAX_PATH(260)
    
Dll             kernel32;
    
DllFunction     getTimeZoneInformation;
    
int             secondsTimeZone;
    
int             retVal;
    
binary          lpTimeZoneInformation = new Binary(#MAX_PATH);
    
;
    
kernel32        = new Dll("kernel32.dll");

    
//---------------------------------------------------------------------------------- Чтение информации о часовом поясе
    
getTimeZoneInformation  = new DllFunction(kernel32"GetTimeZoneInformation");
    
getTimeZoneInformation.returns(ExtTypes::DWORD);
    
getTimeZoneInformation.arg(ExtTypes::POINTER);

    
retVal getTimeZoneInformation.call(lpTimeZoneInformation);

    
// Из всей информации нужен только сдвиг часового пояса к Гринвичу. Он указывается в минутах
    
secondsTimeZone  lpTimeZoneInformation.dWord(0)*60;

    print 
secondsTimeZone," секунд";
    
pause;


Старый 04.09.2006, 17:33   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Владимир Максимов
Если еще актуальна тема с Гринвичем, то я определял часовой пояс так:
Да, спасибо. Это может пригодиться.
Надо только найти еще один час. Я так понимаю, это следствие летнего перевода часов. И учесть знак.

print secondsTimeZone дает -10 800 секунд (т.е. 3 часа), а нам, получается, надо иметь -14 400 (т.е. 4 часа)...

Есть ли какие-нибудь соображения насчет этого дополнительного часа?
(или будем пользоваться алгоритмом только при зимнем времени?)

P.S. Вроде, что-то вот отсюда можно взять...
Цитата:
Сообщение от туда
UTC НИКОГДА не переходит на летнее время.
Да действительно, изучил вопрос и понял. Летом у нас GMT+4.

Последний раз редактировалось Gustav; 04.09.2006 в 17:59.
Старый 04.09.2006, 18:26   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Gustav
Надо только найти еще один час. Есть ли какие-нибудь соображения насчет этого дополнительного часа?
Пойдем от обратного. Зачем нам заморачиваться с часовыми поясами, если и система считает время по Гринвичу, и файловые времена хранятся по Гринвичу?
X++:
// дополнение к классу WinAPI
client server static Binary getSystemTime()
{
    DLL         _winApiDLL      = new DLL(#KernelDLL);
    DLLFunction _getSystemTime  = new DLLFunction(_winApiDLL, @'GetSystemTime');
    Binary      systemTime      = new Binary(#offset16);
    _getSystemTime.returns(ExtTypes::void);
    _getSystemTime.arg(ExtTypes::Pointer);
    _getSystemTime.call(systemTime);
    return systemTime;
}

static void KKu_Job_6901_TestFileTime(Args _args)
{
    FileName    fileName = @'c:\testtime.txt';
    int         hFile;
    ;
    if (WinAPI::fileExists( fileName ))
        WinAPI::deleteFile( fileName );
    hFile = WinAPI::createFile( fileName );
    WinAPI::closeHandle( hFile );
    info( fileName );
    info( 'Даты/вреям в формате ГГ ММ ДД / ЧЧ ММ СС' );
    info( strfmt("created  date/time %1/%2", date2str(WinAPI::getFileCreatedDate(fileName), 321,2,1,2,1,2), time2str(WinAPI::getFileCreatedTime(fileName), 3,1)));
    info( strfmt("modified date/time %1/%2", date2str(WinAPI::getFileModifiedDate(fileName),321,2,1,2,1,2), time2str(WinAPI::getFileModifiedTime(fileName),3,1)));
    info( strfmt("accessed date/time %1/%2", date2str(WinAPI::getFileAccessedDate(fileName),321,2,1,2,1,2), time2str(WinAPI::getFileAccessedTime(fileName),3,1)));
    info( 'Время "сейчас" в формате ЧЧ ММ СС' );
    info( time2str( WinAPI::systemTimeToTimeOfDay(WinAPI::getSystemTime()),3,1) );
}
На выходе получаем:
Код:
c:\testtime.txt
Даты/вреям в формате ГГ ММ ДД / ЧЧ ММ СС
created  date/time 06 09 04/14 29 12
modified date/time 06 09 04/14 29 12
accessed date/time 06 09 04/14 29 12
Время "сейчас" в формате ЧЧ ММ СС
14 29 12
При том что текущее время у меня на компе - 18:29 (UTC +03:00 +1 час за счет летнего времени).
Старый 04.09.2006, 18:59   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от gl00mie
Пойдем от обратного. Зачем нам заморачиваться с часовыми поясами, если и система считает время по Гринвичу, и файловые времена хранятся по Гринвичу?
Да, это душевно. Спасибо. Это мне нравится.

Чего-то такого мне и хотелось: либо правильную дельту между timenow и SystemTime, либо, действительно, просто SystemTime как точку отсчета "возраста назад" (всё равно вычитать будем в скрытом от внешних глаз методе). И удивительно, вообще, что эту функцию не вбабахали в стандарт класса WinAPI...

(ну, а полный зачОт по теме уже поставил раньше)
Теги
time, winapi, время, файл

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Закупка на проект "Время и расходы" Sentry DAX: Функционал 6 19.02.2016 14:09
"An unexpected exception occurred" во время установки. Hub DAX: Администрирование 2 19.12.2009 12:09
Время по графику и фактическое время работы в табеле nicko DAX: Функционал 0 09.02.2005 15:24
Поле с типом "Время" Кирилл DAX: Программирование 9 06.05.2004 10:53
Установить время файла? SnowMan DAX: Программирование 5 01.10.2003 14:42

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:28.