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

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

Преобразование даты в Posix формат


Квэнди ©   (2006-07-17 14:10:00) 

Здравствуйте. Каким образом можно преобразовать tdatetime в формат Posix:
Mon, 17 Jul 2006 11:26:15 +0400


Шпиён   (2006-07-18 11:57:00) [1]


> begin...end ©   (18.07.06 11:45) [11]

Тоже хороший вариант, о нем я не подумал -), занялся ответом на вопрос

> Квэнди ©   (17.07.06 14:33) [2]
> Разве сможет  FormatDateTime  привести дату к такому виду
> ?


umbra   (2006-07-18 11:57:00) [2]


> Недостаток - используются глобальные переменные, код не
> потокобезопасный. Поэтому в D6 и "старше" лучше (imho) все-
> же не пользоваться FormatDateTime, а собирать строчку "ручками".
>

начиная с Д7 есть потокобезопасная версия этой функции


begin...end   (2006-07-18 11:45:00) [3]

> Шпиён   (18.07.06 10:11) [9]

> Поэтому в D6 и "старше" лучше (imho) все-же не пользоваться
> FormatDateTime, а собирать строчку "ручками".

Лучше GetDateFormat/GetTimeFormat использовать. Оно рульно будет.


Шпиён   (2006-07-18 10:55:00) [4]

Можно, конечно, "заставить" приложение стартовать в английской локали, но  думаю, что это не лучший вариант -)


Шпиён   (2006-07-18 10:11:00) [5]

Есть одно "НО"
1) решение sniknik ©   (17.07.06 15:23) [6]не для всякой версии
Delphi (в D6 этот вариант не пройдет, в 2006 - все будет ОК)

Вот одно из возможных решений с FormatDateTime для D6 (схематично, в реальном коде неплохо бы сохранять и восстанавливать старые значения). Недостаток - используются глобальные переменные, код не потокобезопасный. Поэтому в D6 и "старше" лучше ( imho) все-же не пользоваться FormatDateTime, а собирать строчку "ручками".

function GetTimeZoneBias : integer;
var
 TimeZoneInformation : TTimeZoneInformation;
begin
 if (TIME_ZONE_ID_DAYLIGHT = GetTimeZoneInformation(TimeZoneInformation)) then
   Result := TimeZoneInformation.Bias+TimeZoneInformation.DaylightBias
else
 Result := TimeZoneInformation.Bias;
 end;

procedure TForm1.Button1Click(Sender: TObject);
var
Bias:Integer;
begin
 ShortMonthNames[1] := 'Jan';
 ShortMonthNames[2] := 'Feb';
 ShortMonthNames[3] := 'Mar';
 ShortMonthNames[4] := 'Apr';
 ShortMonthNames[5] := 'May';
 ShortMonthNames[6] := 'Jun';
 ShortMonthNames[7] := 'Jul';
 ShortMonthNames[8] := 'Aug';
 ShortMonthNames[9] := 'Sep';
 ShortMonthNames[10] := 'Oct';
 ShortMonthNames[11] := 'Nov';
 ShortMonthNames[12] := 'Dec';

 ShortDayNames[1] := 'Sun';
 ShortDayNames[2] := 'Mon';
 ShortDayNames[3] := 'Tue';
 ShortDayNames[4] := 'Wed';
 ShortDayNames[5] := 'Thu';
 ShortDayNames[6] := 'Fri';
 ShortDayNames[7] := 'Sat';

Label1.Caption:=FormatDateTime('ddd, dd mmm yyyy hh:mm:ss',now);
Bias:=GetTimeZoneBias;
If Bias > 0 then Label1.Caption:=Label1.Caption+ ' -'
   else Label1.Caption := Label1.Caption+ ' +';
Label1.Caption:=Label1.Caption+Format('%.4d',[abs(ROUND(BIAS / 0.6))]);
end;


evvcom   (2006-07-18 08:29:00) [6]

А для вычисления timezone используй разницу между GetSystemTime и GetLocalTime. Только определись сначала твоя исходная дата системная или локальная.


Пусик   (2006-07-17 21:15:00) [7]


> Квэнди ©

Вот здесь читал? -
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/local_time.asp


sniknik   (2006-07-17 15:23:00) [8]

> локаль (нужна eng)
var FS: TFormatSettings;
begin
 GetLocaleFormatSettings($409, FS);
 ....:= FormatDateTime(...., ...., FS);


Квэнди   (2006-07-17 14:59:00) [9]

Уточню:
получается почти все, за исключением:
локаль (нужна eng)
и собственно timezone которго в formatdatetime нету.


evvcom   (2006-07-17 14:44:00) [10]

Ну ты хоть F1 нажал? Учись работать со справкой. Не все ж за тебя другие делать будут. Ключевое слово тебе дадено. Будешь пробовать, будут вопросы, приводи, что попробовал, будут и ответы.


Квэнди   (2006-07-17 14:33:00) [11]

Разве сможет  FormatDateTime  привести дату к такому виду ?


Квэнди   (2006-07-17 14:33:00) [12]

И если может , то покажите как пожалуйста


evvcom   (2006-07-17 14:32:00) [13]

Тебе в строку что ли? См. FormatDateTime.


Наверх

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