|
Тема
|
Смяна на формата на датата в Delphi
|
|
Автор |
zpetrov (непознат) |
Публикувано | 26.02.08 09:01 |
|
Здравейте, често ми се налага да работя с дати в бази данни на Delphi и срещам следния проблем:
Ако в регионалните настройки формата е избран да е "dd.MM.yyyy г." навсякъде се възприема по този начин. Ако обаче там е променено да речем на "d.M.yyyy" немога да го промена на "dd.MM.yyyy г." .
Пробвах следния код:
DateSeparator := '.';
ShortDateFormat:='dd.MM.yyyy г.';
Application.UpdateFormatSettings:=False;
още при зареждане на формата но не се получава.
DateTimePicker- те не се променят. Дори на всеки от тях да задам желания от мен формат те пак се променят в зависимост от това какво е в регионалнте настройки.
виждал съм обаче програми които променят датата, което означава. че може да стане само дето незнам как. Можете ли да помогнете ?
Предварително Ви благодаря.
| |
Тема
|
Re: Смяна на формата на датата в Delphi
[re: zpetrov]
|
|
Автор |
Formal (незнаещ) |
Публикувано | 27.02.08 11:24 |
|
Ако го правиш на OnCreate, там вече са създадени компонентите на формата, пробвал ли си да сложиш кода в project файла или в initialization?
| |
Тема
|
Re: Смяна на формата на датата в Delphi
[re: Formal]
|
|
Автор | zpetrov (Нерегистриран) |
Публикувано | 27.02.08 12:01 |
|
слагал съм кода само на On Show на главната форма, но това не променя въпроса ми . Аз искам да се променя Regional Settings настройката, а не да нагаждам компонентите си по вече установения формат за дата.
И все пак благодаря. Ще пробвам да видя дали поне в програмата ще се държи коректно а не на всеки DateТimePicker да му задавам формат принудително
| |
Тема
|
Re: Смяна на формата на датата в Delphi
[re: zpetrov]
|
|
Автор | Ивaнчo (Нерегистриран) |
Публикувано | 29.02.08 08:57 |
|
Направи си един празен юнит, или отвори някой който НЯМА форма.
Най - отдолу, преди end. напиши следното:
initialization
ShortDateFormat := 'dd/mm/yyyy';
LongdateFormat := 'dd/mm/yyyy';
DateSeparator := '/';
DecimalSeparator := '.';
ThousandSeparator := char(160);
CurrencyString := 'лв';
CurrencyFormat := 3;
NegCurrFormat := 8;
CurrencyDecimals := 2;
ShortTimeFormat := 'hh:mm';
LongTimeFormat := 'hh:mm:ss';
Application.UpdateFormatSettings:=False;
или си постави каквито си искаш стойности за глобалните променливи
| |
Тема
|
Хубава идея
[re: Ивaнчo]
|
|
Автор |
NikB (любопитен) |
Публикувано | 01.03.08 09:30 |
|
Хубава идея.
Но няма нужда от празен юнит.
Явно, трябва тия редове да се изпълнят преди създаване на Дейта сетите.
Това може да стане по описания начин - в initialization частта на кой и да е юнит (викат се и се изпълняват по време на първия begin в проектния файл).
Има и други начини за оформление: да се направи отделна процедура, която да се вика непосредствено след тоя begin (в проектния файл е викането, апроцедурата - там или някъде другъде)
Или дори конструктора на главната форма (която се създава първа, преди всякакви дейта модули)
Но по същество е едно и също.
Впрочем, аз винаги съм предпочитал да си съхранявам датите в база данни като цели числа и да ги форматирам при вход и изход. Малко ме смущава, че Юникс представянето ще има проблем 2037г (някъде), но вероятно доста преди това ще се премине от int32 на int64 и проблемът ще се реши по-лесно.
Естествено, смятам, че и tDateTime е универсален дата формат.
| |
Тема
|
Re: Хубава идея
[re: NikB]
|
|
Автор | Ивaнчo (Нерегистриран) |
Публикувано | 01.03.08 21:21 |
|
Да, да... Така е... Всякак може. Въпрос на конкретна реализация. В горния случай, кода го "пляснах" в initialization, да му е по-ясно на колегата, но може пък и да съм го объркал, знам ли .
Избягвам да слагам код в основната форма при създаването и, защото в 99.9 % от случаите ми, преди това се създава TDataModule. Затова съм си направил един юнит в който има един куп помощни функции и процедури, и именно в initialization на този юнит, се вика и една процедура с цитирания код. Но предполагам, че всеки програмист си има такива "ценни" юнитчета.
За бази данни - не знам, може би съм малко объркан, но за какво ти е това обръщане в целочислено число?!? До колкото зная, почти всички потдържат TIMESTAMP тип данни, поне ако са ANSI92 съвместими. Но ти си знаеш
| |
Тема
|
Re: Хубава идея
[re: Ивaнчo]
|
|
Автор |
vido (минаващ) |
Публикувано | 01.03.08 22:14 |
|
Ако става въпрос за Unix, а не за бази данни Seconds since Jan 01 1970 в 32 битово целочислено число? Ако се използва такова представяне наистина трябва да се преформатира. Всъшност, какви са и как работят Now и Date в Кайликс? Не са ли абсолютно същите?Редактирано от vido на 01.03.08 22:29.
| |
Тема
|
Re: Хубава идея
[re: vido]
|
|
Автор | Ивaнчo (Нерегистриран) |
Публикувано | 02.03.08 09:12 |
|
Хммм...
И идея си нямам за Kylix - никога не ми се е налагало през последните 20-на години да пиша нещо за Unix среди
| |
|
|
|
|