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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.12.2010, 08:31   #1  
farlander is offline
farlander
MCTS
Аватар для farlander
MCBMSS
Ex AND Project
 
282 / 27 (1) +++
Регистрация: 27.10.2006
Адрес: Россия
Обрезание секунд у типа TimeHour24
Подскажите, какой функцией обрезать в джобе секунды в поле extended type TimeHour24.
__________________
farlander.ru
Старый 03.12.2010, 08:51   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
div?
За это сообщение автора поблагодарили: farlander (1), S.Kuskov (2).
Старый 03.12.2010, 09:04   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Не знаю есть ли каки-то стандартные функции для работы со временем. В большинстве случаев они не нужны, потому как в аксапте тип TimeOfDay является целочисленным и представляет собой количество секунд с начала суток. Таким образом время без секунд можно найти например вот так:
X++:
static void JobTestTime20101203(Args _args)
{
    #TimeConstants
    timeOfDay t = timenow();
    ;
     
    t = t - (t mod #secondsPerMinute);
     
    info(time2str(t, 1, 1));
}

Последний раз редактировалось S.Kuskov; 03.12.2010 в 09:16.
За это сообщение автора поблагодарили: b_nosoff (1), farlander (1), samolalex (1).
Старый 03.12.2010, 09:30   #4  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Есть метод в классе Global Time2StrHM:
X++:
static void TestTimeJob(Args _args)
{
    TimeHour24  tm = timenow();
    ;
    info(Time2StrHM(tm));
}
Код метода:
X++:
static TempStr time2StrHM(int tIME)
{
    return num2str( tIME div 3600       ,2,0,0,0)+':'+
           num2Str0(tIME mod 3600 div 60,2,0,0,0);
}
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 03.12.2010 в 09:58.
За это сообщение автора поблагодарили: Zabr (3), farlander (1).
Старый 03.12.2010, 13:40   #5  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от samolalex Посмотреть сообщение
Есть метод в классе Global Time2StrHM:
Спасибо за Time2StrHM, не знал. В ней оказался еще один большой плюс. Например, вы хотите показать не время, а временную разницу между двумя моментами времени, причем они могут быть в разные сутки (то есть разница больше 24 часов). Так вот, функция time2str показывает максимальное время 24:59:59 (если больше, показыват строку "????????"). А Time2StrHM - любое !
Как говорится, век живи - век учись....
За это сообщение автора поблагодарили: S.Kuskov (1), samolalex (1).
Старый 03.12.2010, 14:01   #6  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
Спасибо за Time2StrHM, не знал. В ней оказался еще один большой плюс. Например, вы хотите показать не время, а временную разницу между двумя моментами времени, причем они могут быть в разные сутки (то есть разница больше 24 часов). Так вот, функция time2str показывает максимальное время 24:59:59 (если больше, показыват строку "????????"). А Time2StrHM - любое !
Как говорится, век живи - век учись....
Да, если значение времени больше 86400 - количества секунд в сутках, то функция time2str() возвратит строку "????????". А метод Time2StrHM преобразует число в совокупное время без учета суточной цикличности, и в этом огромный плюс
__________________
С уважением, Александр.
Старый 03.12.2010, 14:42   #7  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от samolalex Посмотреть сообщение
Да, если значение времени больше 86400 -
Нет-нет! именно если больше 24:59:59, а не 24:00:00 ! необъяснимо, но факт: число секунд не в сутках, а именно сутки плюс 59 минут плюс 59 секунд. Именно начиная с 25 часов time2str не работает.
За это сообщение автора поблагодарили: farlander (1).
Старый 03.12.2010, 15:02   #8  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
Нет-нет! именно если больше 24:59:59, а не 24:00:00 ! необъяснимо, но факт: число секунд не в сутках, а именно сутки плюс 59 минут плюс 59 секунд. Именно начиная с 25 часов time2str не работает.
Хмм.. а у меня в Axapta 3 получается так:
X++:
static void TestTime(Args _args)
{
    ;
    info(time2str(str2time("24:59:59"), 1, 1)); //Возвращает "??????"
    info(time2str(str2time("24:00:00"), 1, 1)); //Возвращает "24:00:00"
    info(time2str(str2time("24:00:01"), 1, 1)); //Возвращает "??????"    
}
т.е. если время, возвращаемое str2time(), больше 86400, функция time2str() возвращает неопределенное значение в виде "вопросов".
__________________
С уважением, Александр.
Старый 03.12.2010, 15:52   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Zabr прав. Просто str2time("24:59:59") возвращает -1.
samolalex, попробуйте time2str(89999)
Старый 03.12.2010, 15:57   #10  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Zabr прав. Просто str2time("24:59:59") возвращает -1.
samolalex, попробуйте time2str(89999)
Абсолютно верно.
Невероятно, но факт:
X++:
static void TestTime(Args _args)
{
    ;
    info(time2str(89999,1,1)); //Возвращает "24:59:59"
}
Спасибо вам и Zabr'у за информацию!
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 03.12.2010 в 15:59.
Старый 03.12.2010, 16:08   #11  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Оказывается ничего невероятного нет, диапазон отклонения от Всемирного координированного времени UTC в секундах составляет [-89999, 89999].
Инфу взял отсюда и отсюда
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 03.12.2010 в 16:16.
Теги
div

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить из элемента enum-а код типа (enum-а)? Romb DAX: База знаний и проекты 12 27.06.2013 16:17
Значение по умолчанию параметра типа EDT c array elements либо просто массива HorrR DAX: Программирование 16 20.02.2008 19:18
Как получить имя типа расширенного типа velk DAX: Программирование 9 03.08.2006 14:17
Создание нового типа журнала в Управлении запасами vasiliy DAX: Программирование 2 03.11.2005 14:46
Почему в InventJournalTrans поле linenum вещественного типа?! ATimTim DAX: Программирование 7 17.06.2004 17:35

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

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

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