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


Автор: mr_smit 27.5.2009, 17:52
Какая функция возвращает количество миллисекунд прошедшее с 1 января 1970 ? Вроде как должна быть стандартная. Всю справку перерыл не нашел. Она вообще есть?

Автор: MetalFan 27.5.2009, 17:53
mr_smit,  smile  smile  smile 
GetTickCount - возвращает кол-во мсек. со старта системы... но с 1970года...

Автор: kemiisto 27.5.2009, 17:58
MetalFan,  smile это т.н. http://en.wikipedia.org/wiki/Unix_time.

mr_smit, в Delphi стандартной функции нет, но гуглицо за пару секунд.
Код
const 
  // Sets UnixStartDate to TDateTime of 01/01/1970 
  UnixStartDate: TDateTime = 25569.0; 

function DateTimeToUnix(ConvDate: TDateTime): Longint; 
begin 
  Result := Round((ConvDate - UnixStartDate) * 86400); 
end; 

function UnixToDateTime(USec: Longint): TDateTime; 
begin 
  Result := (Usec / 86400) + UnixStartDate; 
end;


Добавлено @ 17:59
mr_smit, кстати, не миллисекунд, а просто секунд.

Автор: MetalFan 27.5.2009, 18:07
Цитата(kemiisto @  27.5.2009,  17:58 Найти цитируемый пост)
mr_smit, кстати, не миллисекунд, а просто секунд.

во-во... я просто подумал, что 4х байт DWORD'а хватит только на 49 дней в мсек. но никак не с 1970г

Автор: mr_smit 27.5.2009, 18:24
Я выкрутился, но нужного результата не добился.

Код

procedure TForm1.Button1Click(Sender: TObject);
var  Present, Date1970: TDateTime;
begin
 Present:= Now;
 Date1970:=EncodeDate(1970, 1, 1);
 Edit1.Text:=IntToStr(MilliSecondsBetween(Present,Date1970));
 Edit2.Text:=IntToStr(DateTimeToUnix(Present));
end;


user posted image

С этим всё понятно. Не понятно следующее:

Почему JavaScript функция и Delphi функция возвращают разные значения.

Код

<script language="JavaScript">
function bar() {
var tt = new Date();
alert(tt.getTime());
}
</script>

<input type="button" name="" value="" onClick="javascript: bar();">


user posted image

Нажал в Delphi кнопку, Нажал на странице кнопку - понятно что миллисекунды не совпадут, но не настолько же???   

Начало 124345 и 124344

Автор: CodeMonkey 27.5.2009, 18:31
http://transl-gunsmoker.blogspot.com/2008/11/blog-post_24.html.

Добавлено через 13 секунд
В конце про Яву.

Автор: mr_smit 27.5.2009, 19:53
Спасибо всем. Разобрался.

Автор: Riply 27.5.2009, 21:05
Цитата(mr_smit @  27.5.2009,  17:52 Найти цитируемый пост)
Какая функция возвращает количество миллисекунд прошедшее с 1 января 1970 ? Вроде как должна быть стандартная. Всю справку перерыл не нашел. Она вообще есть? 


RtlSecondsSince1970ToTime
RtlTimeToSecondsSince1970

?

Автор: Pavelbej 28.5.2009, 11:05
Цитата(kemiisto @  27.5.2009,  17:58 Найти цитируемый пост)
mr_smit, в Delphi стандартной функции нет, но гуглицо за пару секунд.

Как нет? 
А модуль DateUtils?
Код

{ Unix date conversion support }

function DateTimeToUnix(const AValue: TDateTime): Int64;
begin
  Result := Round((AValue - UnixDateDelta) * SecsPerDay);
end;

function UnixToDateTime(const AValue: Int64): TDateTime;
begin
  Result := AValue / SecsPerDay + UnixDateDelta;
end;



Автор: kemiisto 28.5.2009, 11:52
Цитата(Riply @  27.5.2009,  19:05 Найти цитируемый пост)
RtlSecondsSince1970ToTime
RtlTimeToSecondsSince1970

Цитата(Pavelbej @  28.5.2009,  09:05 Найти цитируемый пост)
Как нет?

Сорри! У меня нет Delphi, искал через Google.

Автор: mr_smit 30.5.2009, 20:16
Спасибо

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