Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
ВнизПреобразование даты в Posix формат Найти похожие ветки
← →
Квэнди © (2006-07-17 14:10) [0]Здравствуйте. Каким образом можно преобразовать tdatetime в формат Posix:
Mon, 17 Jul 2006 11:26:15 +0400
← →
evvcom © (2006-07-17 14:32) [1]Тебе в строку что ли? См. FormatDateTime.
← →
Квэнди © (2006-07-17 14:33) [2]Разве сможет FormatDateTime привести дату к такому виду ?
← →
Квэнди © (2006-07-17 14:33) [3]И если может , то покажите как пожалуйста
← →
evvcom © (2006-07-17 14:44) [4]Ну ты хоть F1 нажал? Учись работать со справкой. Не все ж за тебя другие делать будут. Ключевое слово тебе дадено. Будешь пробовать, будут вопросы, приводи, что попробовал, будут и ответы.
← →
Квэнди © (2006-07-17 14:59) [5]Уточню:
получается почти все, за исключением:
локаль (нужна eng)
и собственно timezone которго в formatdatetime нету.
← →
sniknik © (2006-07-17 15:23) [6]> локаль (нужна eng)
var FS: TFormatSettings;
begin
GetLocaleFormatSettings($409, FS);
....:= FormatDateTime(...., ...., FS);
← →
Пусик © (2006-07-17 21:15) [7]
> Квэнди ©
Вот здесь читал? -
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/local_time.asp
← →
evvcom © (2006-07-18 08:29) [8]А для вычисления timezone используй разницу между GetSystemTime и GetLocalTime. Только определись сначала твоя исходная дата системная или локальная.
← →
Шпиён (2006-07-18 10:11) [9]Есть одно "НО"
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;
← →
Шпиён (2006-07-18 10:55) [10]Можно, конечно, "заставить" приложение стартовать в английской локали, но думаю, что это не лучший вариант -)
← →
begin...end © (2006-07-18 11:45) [11]> Шпиён (18.07.06 10:11) [9]
> Поэтому в D6 и "старше" лучше (imho) все-же не пользоваться
> FormatDateTime, а собирать строчку "ручками".
Лучше GetDateFormat/GetTimeFormat использовать. Оно рульно будет.
← →
Шпиён (2006-07-18 11:57) [12]
> begin...end © (18.07.06 11:45) [11]
Тоже хороший вариант, о нем я не подумал -), занялся ответом на вопрос
> Квэнди © (17.07.06 14:33) [2]
> Разве сможет FormatDateTime привести дату к такому виду
> ?
← →
umbra © (2006-07-18 11:57) [13]
> Недостаток - используются глобальные переменные, код не
> потокобезопасный. Поэтому в D6 и "старше" лучше (imho) все-
> же не пользоваться FormatDateTime, а собирать строчку "ручками".
>
начиная с Д7 есть потокобезопасная версия этой функции
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c