Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Формат даты [D7, XP]


Страницы:   1 2

aglar ©   (2008-12-04 14:46:00) 

procedure TForm1.Timer1Timer(Sender: TObject);
var
 formatsettings: tFormatSettings;
begin
GetLocaleFormatSettings(1049, formatsettings);
statusbar1.Panels[1].Text:=DateTimetoStr(Now, formatsettings);
end;

Как вывести в статусбаре дату в полном формате?


clickmaker   (2008-12-10 11:09:00) [1]

> как получить от винды декабря, а не Декабрь

To get the genitive form of the month name, call GetDateFormat with a date picture of ddMMMM and remove the two digits from the beginning of the returned string.
(c) MSDN


{RASkov}   (2008-12-10 10:42:00) [2]

function GetDate: string;
var
 st: TSystemTime;
 Date, FormatString: PChar;
 DateSize, FormatStringSize: integer;
begin
 Result := '';
 FormatStringSize := GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SLONGDATE, nil, 0);
 GetMem(FormatString, FormatStringSize * SizeOf(Char));
 GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SLONGDATE, FormatString, FormatStringSize);
 GetLocalTime(st);
 DateSize := GetDateFormat(LOCALE_USER_DEFAULT, 0, nil, FormatString, nil, 0);
 GetMem(Date, DateSize * SizeOf(Char));
 GetDateFormat(LOCALE_USER_DEFAULT, 0, @st, FormatString, Date, DateSize * SizeOf(Char));
 Result := Date;
 FreeMem(Date);
 FreeMem(FormatString);
end;

Помоему этот код приводил DVM


ЮЮ   (2008-12-10 08:01:00) [3]

Кстати, тут как-то кто-приводил код как получить от винды декабр я, а не Декабр ь, а я своевременно не воспользовался :(

Может напомнит?


Anatoly Podgoretsky   (2008-12-05 17:03:00) [4]

> aglar  (05.12.2008 16:47:25)  [25]

Об этом уже была речь, но ты не хочешь смотреть с точки зрения пользователя, нахрена ему january 1, 2008?
Посмотри на иконку календаря и попробуй поменять локализацию.


aglar   (2008-12-05 16:47:00) [5]


> Это еще не все, запустит программу на машине с другой локализацией
> и получит "1 januabris 2008"


Разве то, что мы устанавливаем LCID в 1049 ( GetLocaleFormatSettings(1049, formatsettings))не значит, что будут полученны именно "русские" настройки?


Anatoly Podgoretsky   (2008-12-05 16:19:00) [6]


> Это у тебя. Я, например, знаю, что моя не будет запущена.

Может, но только один раз.


Ega23   (2008-12-05 16:13:00) [7]


> Какое обобщение, если я заранее точно не знаю, где будет
> запущена программа с гарантией, что кто то не изменит локализацию.


Это у тебя. Я, например, знаю, что моя не будет запущена.


Anatoly Podgoretsky   (2008-12-05 15:47:00) [8]

> Ega23  (05.12.2008 15:28:21)  [21]

Какое обобщение, если я заранее точно не знаю, где будет запущена программа с гарантией, что кто то не изменит локализацию. А у меня только в конторе используется минимум три локализации, разве могу я зависеть от природы? А пользователи, нафиг пользователю полная дата на английском или русском, если у него арабская локаль?


Ega23   (2008-12-05 15:28:00) [9]


> Это еще не все, запустит программу на машине с другой локализацией
> и получит "1 januabris 2008"


Ну, полное обобщение делать - это тоже своего рода паранойя.


Anatoly Podgoretsky   (2008-12-05 15:11:00) [10]

> Ega23  (05.12.2008 14:12:19)  [19]

Это еще не все, запустит программу на машине с другой локализацией и получит "1 januabris 2008"


Ega23   (2008-12-05 14:12:00) [11]


> Вероятнее будет "1 январь 2008"


Тем более. Нафиг оно такое нужно...


Anatoly Podgoretsky   (2008-12-05 14:02:00) [12]

> clickmaker  (05.12.2008 13:57:17)  [17]

Может и проблема появится в другом месте.


clickmaker   (2008-12-05 13:57:00) [13]

> Вероятнее будет "1 январь 2008"

если озабоченный программист не сменит окончания в LongMonthNames )


Anatoly Podgoretsky   (2008-12-05 13:55:00) [14]

> Ega23  (05.12.2008 13:47:15)  [15]

Вероятнее будет "1 январь 2008"


Ega23   (2008-12-05 13:47:00) [15]


> Anatoly Podgoretsky ©   (05.12.08 12:26) [13]


Интересно. Не знал. Буду иметь ввиду, спасибо.

Но всё равно (ИМХО), в статус-баре видеть строку "1 января 2008" - лично меня как-то коробит от этого.


Anatoly Podgoretsky   (2008-12-05 13:21:00) [16]

> clickmaker  (05.12.2008 12:00:10)  [10]

Это только часть формата, определяющий порядок и количество букв, правильно делать по инструкции Борланда, а именно вызывать GetLocaleSettings


Anatoly Podgoretsky   (2008-12-05 12:26:00) [17]

Все просто - в программе написано изменение локальных настроек.
Часто по причине, что не смогли сделать это нормально и полезли в региональные настройки. Вспомните некоторые вопросы на данном форуме.
А в наше время еще и потоки вносят свою лепту. В переменные то считываются один раз при старте, а на последующие изменения не обращают внимания, при том не важно где сделаны эти изменения.
В справке есть указание по поводу  FormatSettings

> TFormatSettings data structure must be initialized by a
> call to GetLocaleFormatSettingsbefore it can be used with
> any string formatting routines.

Про ошибки Борланда конечно ничего, но в группах Борланда есть информация, может есть и в справке, но тогда хорошо спрятано.

Кроме того замечание касалось [6]
Ему не нужен формат dd.mm.yyyy - это не длинный формат даты, а короткий. А длинный формат от многого зависит, например
GetLocaleFormatSettings(1049, formatsettings);
первый параметр, кроме ранее сказаного выбирает какую локаль использовать.

По этому в большинстве случаев лучше пользоваться этим с локальной переменной, а не с глобальными системными переменными, которые в любой момент безконтрольно меняются. Чаще это конечно касается цифр, поскольку вместо локальной работы, программист не задумываясь меняет DecimalSeparator и может получиться, что ряд чисел в отчете с запятой, а часть с точкой, это если не повезет.


clickmaker   (2008-12-05 12:25:00) [18]

ну разве что TimeSeparator ':' или если мы обобщенный формат зададим, типа 'c'


Ega23   (2008-12-05 12:04:00) [19]


> как на эту строку могут повлиять "озабоченые программисты,
>  которые меняют LocaleFormatSettings"?


Мне вот тоже это как-то непонятно...


clickmaker   (2008-12-05 12:00:00) [20]

> [9] Anatoly Podgoretsky ©   (05.12.08 11:48)

так у нас же там явно формат задан.
'dd.mm.yyyy hh:nn:ss'
как на эту строку могут повлиять "озабоченые программисты, которые меняют LocaleFormatSettings"?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо