powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / вопрос с датой
6 сообщений из 6, страница 1 из 1
вопрос с датой
    #34950472
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВСДМ ПРИВЕТ! При импорте с екселя в бд, иногда поле с датой и временем принимает странный формат в виде набора цифер н-ер 35621.236574854. Из этого значения как извлекать дату
я функцию нашёл, но вот как извлекается время - понять не могу! ПРОШУ ВАШЕГО СОДЕЙСТВИЯ...
...
Рейтинг: 0 / 0
вопрос с датой
    #34951194
homik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вырезки из постов фоксклуба:

Делал только один раз и вроде всё работало

* Дата оприходования товара
luValue = NVL(.ActiveCell.Offset(0,3).Value,'')
lcType = type('luValue')
do case
case lcType='T'
ldg4 = ttod(luValue)
case lcType='C'
ldg4 = ctod(luValue)
case lcType='D'
ldg4 = luValue
endcase
****************
Основная проблема здесь в том что Excel использует другую чем VFP систему записи дат, пользователь может устанавливать произвольный формат дат, и формат дат может меняться внутри одной колонки. Так что это не простой случай, и решения могут быть разными.

В большинстве случаев помогает преобразование данных Excel в массив VFP, и затем APPEND from array. Попробуйте что-то вроде:

pcSrcFile="c:\book1.xls"

LOCAL lccom
DIMENSION aExcelData[1]

oExcel=Createobject("EXCEL.APPlication")
oExcel.Workbooks.OPen(pcSrcFile)
aExcelData= oExcel.activesheet.UsedRange.value

oExcel.quit
oExcel=null

use your_table
APPEND FROM ARRAY aExcelData
...
Рейтинг: 0 / 0
вопрос с датой
    #34951292
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так дату из этой белеберды vfp понимает, для этого есть у него функция, правда время при этом игнорируется (обрезается). Может для времении другая какая та функция...

Или хотя бы, на крайняк, алгоритм перевода екселевского формата даты в обычную? Я готов вручую вырезать, склеивать и рассчитывать эту цифру для получения даты-время...
...
Рейтинг: 0 / 0
вопрос с датой
    #34951420
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формат хранения типа DateTime

FoxPro

8 байт

Первые 4 байта - количество дней по Юлианскому исчислению (функция SYS(11, DateTime()))
Следующие 4 байта - количество миллисекунд с полуночи с точностью до 333 миллисекунд

MS SQL

при конвертации в Double

Целая часть - количество дней от 01.01.1900
Дробная часть - отношение количества миллисекунд прошедших с полуночи на количество миллисекунд в сутках (86400000) с точностью до 3.33 миллисекунд (в 100 раз точнее, чем в FoxPro)

Excel

при конвертации в Double

Целая часть - количество дней от 31.12.1900
Дробная часть - отношение количества миллисекунд прошедших с полуночи на количество миллисекунд в сутках (86400000). Точность неизвестна!

===============

Тогда число 35621.236574854 конвертируется примерно так:

Код: plaintext
1.
2.
lnValue =  35621 . 236574854 
?Dtot({^ 1900 - 12 - 31 }+INT(m.lnValue))+MOD(m.lnValue, 1 )* 86400000 
...
Рейтинг: 0 / 0
вопрос с датой
    #34951437
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибочка вышла. В FoxPro при сложении переменной типа DateTime с целым числом предполагается, что число - это количество секунд . Т.е. надо вместо 86400000 указать 86400. Время в секундах, а не в миллисекундах.

Код: plaintext
1.
2.
lnValue =  35621 . 236574854 
?Dtot({^ 1900 - 12 - 31 }+INT(m.lnValue))+MOD(m.lnValue, 1 )* 86400 
...
Рейтинг: 0 / 0
вопрос с датой
    #34952812
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Низкий поклон Вам!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / вопрос с датой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]