![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование даты в 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.