Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Время в местном формате


Автор: igor-567 14.9.2005, 02:51
Кто-нибудь знает, как получить время в местном формате?
Например «9 сентября 2005 года», а не как дает DateTimeToString «9 сентябрь 2005».
Но я имею ввиду не только русский формат, а формат юзера.

Автор: mvdr 14.9.2005, 07:50
т.е. выводить дату так, как хочет пользователь?
тогда - в ручную.

Код

Label1.Caption:=DateToString(Date);
if Length(Label1.Caption)=5 then Label1.Caption:='0'+Label1.Caption; // если число до 10, то добавляем нолик вперед (вместо '5' будет '05')
Label2.Caption:=copy(Label1.Caption,1,2); // число
Label3.Caption:=copy(Label1.Caption,4,2); // месяц
Label4.Caption:=copy(Label1.Caption,7,4); //год
{все, далее делаем выводим дату в том формате, который заказал пользователь}


Код

if Label3.Caption='10' then 
begin
Label3.Visible:=true;
Label3.Caption:='это месяц октябрь или октября или как надо';
end;



Автор: ~FoX~ 14.9.2005, 08:05
Femida
Будет вам издеваться то над человеком smile

igor-567
Вот FormatDateTime избавит тебя от сердечных мук: smile
Код

Label1.Caption:= FormatDateTime('dd mmmm yyyy', now);


Автор: mvdr 14.9.2005, 08:30
~FoX~, я исхожу с той точки зрения, что возможно человеку надо сделать задание для универа или школы, а там надо делать все черех жо.., ой,, т.е. используй 2-3 свойства smile
Да и мозгам полезнееsmile

Автор: ~FoX~ 14.9.2005, 09:51
Цитата(Femida @ 14.9.2005, 09:30)
Да и мозгам полезнееsmile

Согласен.....
Но если уж издеваться то до конца smile

Код

var
  ArMon: array [1..12] of string;
  ArDay: array [1..7] of string;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ArMon[1]:='Январь';
  ArMon[2]:='Февраль';
  ArMon[3]:='Март';
  ArMon[4]:='Апрель';
  ArMon[5]:='Май';
  ArMon[6]:='Июнь';
  ArMon[7]:='Июль';
  ArMon[8]:='Август';
  ArMon[9]:='Сентябрь';
  ArMon[10]:='Октябрь';
  ArMon[11]:='Ноябрь';
  ArMon[12]:='Декабрь';

  ArDay[1]:='Воскресенье';
  ArDay[2]:='Понедельник';
  ArDay[3]:='Вторник';
  ArDay[4]:='Среда';
  ArDay[5]:='Четверг';
  ArDay[6]:='Пятница';
  ArDay[7]:='Суббота';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Mon, Dy: string;
  Year, Month, Day: word;

begin
  DecodeDate(Date, Year, Month, Day);
  dy:=ArDay[DayOfWeek(Date)];
  Mon:= ArMon[Month];
  Label1.Caption := dy + ' ' + IntToStr(Day)+ ' ' + Mon + ' ' + IntToStr(Year);
  if DayOfWeek(Date) = 6 then Label2.Caption := 'Пора пить пиво!!!'
  else if (DayOfWeek(Date)= 1) or (DayOfWeek(Date) = 7) then Label2.Caption := 'Ура, выходные';
end;

Автор: mvdr 14.9.2005, 10:16
~FoX~, ну ты и извращенец! smile

Автор: igor-567 14.9.2005, 21:43
Ребята, ценю ваши упражнения по садо-мазахизму.
Но мой вопрос заканчивался «Но я имею ввиду не только русский формат, а формат юзера.»
А это значит, что даже китаец иди араб должен увидеть то что нужно.
Кстати, в VB.Net есть такая функция, даже в JSctipt есть такая
Код

<script language="javascript" type="text/javascript">
var d=new Date();
alert(d.toLocaleDateString());
</script>


По крайней мере, в IE показывает как раз то, что я просил.
Ну а в Delphi?

К счастью, я закинул этот вопрос на три сайта сразу и получил вот такой отет:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 Buf: PChar;
 Sz: Integer;
begin
 Sz := GetDateFormat(LOCALE_USER_DEFAULT,DATE_LONGDATE,nil,nil,Buf,0);
 if Sz = 0 then
   RaiseLastOSError;
 GetMem (Buf,Sz);
 try
   GetDateFormat(LOCALE_USER_DEFAULT,DATE_LONGDATE,nil,nil,Buf,Sz);
   ShowMessage(Buf);
 finally
   FreeMem (Buf);
 end;
end;



Этот код работает. Я проверял.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)