Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2012, 14:00   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я же выше привёл процедуры перевода даты/времени из/в UnixTime.
зачем спорить то?!

проверил у себя.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  InstallDate: DWORD;
  t: TDateTime;
  Reg: TRegistry;
begin
   Reg := TRegistry.Create;
   Reg.RootKey := HKEY_LOCAL_MACHINE;

   // Определение даты установки Windows
   if Reg.OpenKeyReadOnly( 'SOFTWARE\Microsoft\Windows NT\CurrentVersion' ) then
   begin
      InstallDate := Reg.ReadInteger( 'InstallDate' );
      t := AbUnixTimeToDateTime( InstallDate );
      ShowMessage( DateTimeToStr( t ) );
   end;

   Reg.CloseKey;
   Reg.Free;
end;
работает.


время выдаёт без учёта местного часового пояса. но это легко подправить, в случае необходимости..

для корректировки времени к локальному можете попробовать что-то вроде:
Код:
function DateTimeToLocalDateTime(DateTime: TDateTime): TDateTime;
var
  ZoneInfo: TTimeZoneInformation;
begin
  case GetTimeZoneInformation(ZoneInfo) of
    TIME_ZONE_ID_STANDARD:
      Result := DateTime + (ZoneInfo.Bias / MinutesInDay);
    TIME_ZONE_ID_UNKNOWN, TIME_ZONE_ID_DAYLIGHT:
      Result := DateTime - ((ZoneInfo.Bias + ZoneInfo.DaylightBias) / MinutesInDay);
  else
    Raise Exception.Create('Error Convert DateTo Local DateTime ');
  end;
end;

Последний раз редактировалось Serge_Bliznykov; 05.07.2012 в 14:08.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2012, 15:39   #12
megostudent
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 320
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Умничаем Нужно понимать, что для этого нужно иметь установленный Delphi соответствующей версии, запустить его, создать проект, вставить не понятно какой код, скомпилировать и т.д. Догадайтесь с трех раз - много ли найдется таких желающих?
Так здесь же никто никого не обязывает) А то что я не шарю, а кто-то еще пытается подшутить не оч прикольно)
Serge_Bliznykov огромное спасибо!

по чемут не выходит установить библиотеку Abbrevia, компилится без ошибок, а при установке такое вот-
package c:\programm files\borland\delphi7\projects\bpl\ b304_r70.bpl can't be installed because it is not a design time package

Последний раз редактировалось Stilet; 05.07.2012 в 21:10.
megostudent вне форума Ответить с цитированием
Старый 05.07.2012, 16:09   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так. стоп. зачем Вам ставить библиотеку целиком, если нужный код я из неё уже выдернул и отдал Вам?!!

вот проект ЦЕЛИКОМ - Windows_date_install.rar

а если вкратце, то вот код модуля:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Registry;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ date and time stuff }
const
  Date1900 {: LongInt} = $0001AC05;  {Julian day count for 01/01/1900 -- TDateTime Start Date}
  Date1970 {: LongInt} = $00020FE4;  {Julian day count for 01/01/1970 -- Unix Start Date}
  Unix0Date: TDateTime = 25568;      {Date1970 - Date1900}

  SecondsInDay    = 86400;  {Number of seconds in a day}
  SecondsInHour   =  3600;  {Number of seconds in an hour}
  SecondsInMinute =    60;  {Number of seconds in a minute}
  HoursInDay      =    24;  {Number of hours in a day}
  MinutesInHour   =    60;  {Number of minutes in an hour}
  MinutesInDay    =  1440;  {Number of minutes in a day}


function AbUnixTimeToDateTime(UnixTime : LongInt) : TDateTime;
{ convert unix date to Delphi TDateTime }
var
  Hrs, Mins, Secs : Word;
  TodaysSecs : LongInt;
begin
  TodaysSecs := UnixTime mod SecondsInDay;
  Hrs := TodaysSecs div SecondsInHour;
  TodaysSecs := TodaysSecs - (Hrs * SecondsInHour);
  Mins := TodaysSecs div SecondsInMinute;
  Secs := TodaysSecs - (Mins * SecondsInMinute);

  Result := Unix0Date + (UnixTime div SecondsInDay) +
    EncodeTime(Hrs, Mins, Secs, 0);
end;

function DateTimeToLocalDateTime(DateTime: TDateTime): TDateTime;
var
  ZoneInfo: TTimeZoneInformation;
begin
  case GetTimeZoneInformation(ZoneInfo) of
    TIME_ZONE_ID_STANDARD:
      Result := DateTime + (ZoneInfo.Bias / MinutesInDay);
    TIME_ZONE_ID_UNKNOWN, TIME_ZONE_ID_DAYLIGHT:
      Result := DateTime - ((ZoneInfo.Bias + ZoneInfo.DaylightBias) / MinutesInDay);
  else
    Raise Exception.Create('Error Convert DateTo Local DateTime ');
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  InstallDate: DWORD;
  t: TDateTime;
  Reg: TRegistry;
begin
   Reg := TRegistry.Create;
   Reg.RootKey := HKEY_LOCAL_MACHINE;

   // Определение даты установки Windows
   if Reg.OpenKeyReadOnly( 'SOFTWARE\Microsoft\Windows NT\CurrentVersion' ) then
   begin
      InstallDate := Reg.ReadInteger( 'InstallDate' );
      t := DateTimeToLocalDateTime( AbUnixTimeToDateTime( InstallDate ));
      ShowMessage( DateTimeToStr( t ) );
   end;

   Reg.CloseKey;
   Reg.Free;
end;


end.

Последний раз редактировалось Serge_Bliznykov; 05.07.2012 в 16:12.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2012, 16:11   #14
megostudent
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 320
По умолчанию

Код:
 t := AbUnixTimeToDateTime( InstallDate );
тут ошибка
[Error] Unit1.pas(56): Undeclared identifier: 'AbUnixTimeToDateTime'
megostudent вне форума Ответить с цитированием
Старый 05.07.2012, 16:12   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

см. мой пост выше. я его дополнил исходным кодом проекта...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2012, 16:28   #16
megostudent
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 320
По умолчанию

усе работает
Спасиб еще раз!
megostudent вне форума Ответить с цитированием
Старый 28.11.2015, 01:51   #17
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Да это надо додуматься до такого, чтобы записывать вместо даты время в мс от 1970 года. Теперь ломаю голову, как этот код на Visual C++ перевести.
Пока что получилось считать из реестра DWORD ключ InstallDate и вывести его в Label на форму.
calypso вне форума Ответить с цитированием
Старый 28.11.2015, 09:54   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это надо додуматься до такого, чтобы записывать вместо даты время в мс от 1970 года.
Хегеге )))
А ты в курсе, что все даты и время именно так и записываются? Ну или почти все.
Смысл в любом случае одинаков - берется дата начальная точка отсчета, а уже от нее отсчитывается кол-во дней (к примеру), так и получается искомая дата.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.11.2015, 11:48   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от calypso Посмотреть сообщение
Да это надо додуматься до такого, чтобы записывать вместо даты время в мс от 1970 года. Теперь ломаю голову, как этот код на Visual C++ перевести.
Пока что получилось считать из реестра DWORD ключ InstallDate и вывести его в Label на форму.
дык time_t ж...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.11.2015, 13:45   #20
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Ну с UnixToDateTime в Делфи всё просто. А где взять аналог такой штучки для Visual C++ ?
calypso вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать дату и версию Bios? Exitm Помощь студентам 14 05.05.2012 23:27
Как узнать дату создания файла на ftp Koder-KH Работа с сетью в Delphi 0 30.11.2011 18:11
Узнать дату по гринвичу через интернет art-programs Работа с сетью в Delphi 4 23.08.2011 23:12
Определить версию ОС, дату установки и последнего перезапуска Manonia Общие вопросы Delphi 4 22.03.2010 18:33
как узнать дату создания файла green-shrek Помощь студентам 5 25.02.2010 17:33