:: Visual Foxpro, Foxpro for DOS
Как получить дату
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Есть числа (точнее 4 байта, которые нужно привести с числу) - количество секунд пройдённых после 01.01.2000 года, к примеру 686361600
Нужно привести это число к дате-время:

Какой год выбрать не проблема:
m1=Asc(Substr(liMP,4,1))*256*256*256
m2=Asc(Substr(liMP,3,1))*256*256
m3=Asc(Substr(liMP,2,1))*256
m4=Asc(Substr(liMP,1,1))
mIt=m1+m2+m3+m4
mYear=2000+Int(mIt/3600/24/365)
А вот какой месяц вычислить сложнее:
Вычислим отстаток mMonth1=mIt-Int(mIt/3600/24/365)*365*24*3600
Остаток если поделить на 3600/24 получаем 279 дней и вот думаю как по-проще получить номер месяца из количества дней?
Ну или может у кого-то будут идеи как это реализовать более изящно и красиво
Ratings: 0 negative/0 positive
Re: Как получить дату
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
=month({^2000-01-01 00} + mIt)

...
Аналогично и год вместо твоей:
2000+
високосные не учитываешь.
Если надо просто датавремя, то и год-месяц вычислять не надо.
++
Ну и, насколько помню, побайтное вычисление не надо.
Ctobin() вроде решает.



Исправлено 4 раз(а). Последнее : Taran, 11.10.21 08:27
Ratings: 0 negative/0 positive
Re: Как получить дату
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
MONTH(DATE(mYear,01,01)+279)
Ratings: 0 negative/0 positive
Re: Как получить дату
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Taran
Ctobin() вроде решает
Неразобрался я как-то с этой функцией, без параметров выдаёт не то что нужно
А вот с определением даты всё отлично работает:
mDateN={^2000-01-01 00:00:00}
Return mDateN+mIt
Ratings: 0 negative/0 positive
Re: Как получить дату
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
AngelOKES
Taran
Ctobin() вроде решает
Неразобрался я как-то с этой функцией, без параметров выдаёт не то что нужно
А вот с определением даты всё отлично работает:
mDateN={^2000-01-01 00:00:00}
Return mDateN+mIt

ltDT = {^2000-01-01T00} + ctobin(liMP, '4RS')
Ratings: 0 negative/0 positive
Re: Как получить дату
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Не забудь до 19.01.2068 исправить эту функцию
В 03:14:08 она превратится в тыкву.
Ratings: 0 negative/0 positive
Re: Как получить дату
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Taran
ctobin(liMP, '4RS')
- возвращает CTOBIN(0h28e90c00,"4RS") = 846120, а надо 686361600
Ratings: 0 negative/0 positive
Re: Как получить дату
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
AngelOKES
Taran
ctobin(liMP, '4RS')
- возвращает CTOBIN(0h28e90c00,"4RS") = 846120, а надо 686361600

Что то напутано в твоём первом посте.
Там не получится 686361600.

Убери 'R'.



Исправлено 1 раз(а). Последнее : Taran, 11.10.21 10:12
Ratings: 0 negative/0 positive
Re: Как получить дату
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Taran
Убери 'R'.
Теперь то что нужно!
Taran
Что то напутано в твоём первом посте.
Не понял что у меня напутано? CTOBIN(0h28e90c00,"4S") = 686361600, всё отлично
Ratings: 0 negative/0 positive
Re: Как получить дату
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
AngelOKES
Taran
Убери 'R'.
Теперь то что нужно!
Taran
Что то напутано в твоём первом посте.
Не понял что у меня напутано? CTOBIN(0h28e90c00,"4S") = 686361600, всё отлично

Если строку 0h28... разложить по алгоритму первого поста, то она даст 84...

Получилось и ладно.
Ratings: 0 negative/0 positive
Re: Как получить дату
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Не знаю, у меня всё сходится и с алгоритом первой записи и с последним алгоритмом.
вы порядок байт точно не попутали, можно просто даже взять откртыь калькулятор в винде и занести туда и посмотреть результат
порядок байт справа налево
Ratings: 0 negative/0 positive
Re: Как получить дату
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Да вроде не попутал.

Ну да не суть важно.
Решение вроде найдено и ОК.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 24 Владимир Максимов  (Гостей: 23)

© 2000-2024 Fox Club 
Яндекс.Метрика