|
|
|
вопрос с датой
|
|||
|---|---|---|---|
|
#18+
ВСДМ ПРИВЕТ! При импорте с екселя в бд, иногда поле с датой и временем принимает странный формат в виде набора цифер н-ер 35621.236574854. Из этого значения как извлекать дату я функцию нашёл, но вот как извлекается время - понять не могу! ПРОШУ ВАШЕГО СОДЕЙСТВИЯ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 01:40 |
|
||
|
вопрос с датой
|
|||
|---|---|---|---|
|
#18+
Вырезки из постов фоксклуба: Делал только один раз и вроде всё работало * Дата оприходования товара 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 11:32 |
|
||
|
вопрос с датой
|
|||
|---|---|---|---|
|
#18+
Так дату из этой белеберды vfp понимает, для этого есть у него функция, правда время при этом игнорируется (обрезается). Может для времении другая какая та функция... Или хотя бы, на крайняк, алгоритм перевода екселевского формата даты в обычную? Я готов вручую вырезать, склеивать и рассчитывать эту цифру для получения даты-время... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 11:50 |
|
||
|
вопрос с датой
|
|||
|---|---|---|---|
|
#18+
Формат хранения типа 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 12:19 |
|
||
|
вопрос с датой
|
|||
|---|---|---|---|
|
#18+
Ошибочка вышла. В FoxPro при сложении переменной типа DateTime с целым числом предполагается, что число - это количество секунд . Т.е. надо вместо 86400000 указать 86400. Время в секундах, а не в миллисекундах. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 12:22 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34952812&tid=1588510]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 366ms |

| 0 / 0 |
