Страница 1 из 1

Дата в Галактике

Добавлено: 18 авг 2006, 15:44
Гость
Есть ли такая функция которая помогает преобразовать дату из галактического формата в понятный обычному человеку

Добавлено: 21 авг 2006, 06:37
Алексей
datetostr(data,'DD.MM.YYYY') - на выходе получите строку в формате, указанном в шаблоне.

Re: Дата в Галактике

Добавлено: 21 авг 2006, 11:57
coolibin
Наталья Николаевна писал(а):Есть ли такая функция которая помогает преобразовать дату из галактического формата в понятный обычному человеку
Задавайте вопрос поконкретнее, пожалуйста.

Если имеется в виду, что вам не прочитать дату в MSSQL, то поможет что-то типа:

Код: Выделить всё

CREATE Function IntToDate (@Date As Int) Returns DateTime As 
Begin 
Declare @Res DateTime Declare @CYear Char(4), @CMonth Char(2), @CDay Char(2), @CDate VarChar(10) Declare @IYear Int, @IMonth Int, @IDay Int 

Set @IYear=Cast(Ceiling(@Date/65536) As Int) Set @CYear=Right(Cast(@IYear As VarChar(4)),4) Set @Date=@Date-(@IYear*65536)

Set @IMonth=Cast(Ceiling(@Date/256) As Int) Set @CMonth=Right('00'+Cast(@IMonth As VarChar(2)), 2) Set @Date=@Date-(@IMonth*256) Set @IDay=Cast(Ceiling(@Date) As Int) Set @CDay=Right('00'+Cast(@IDay As VarChar(2)), 2) 

if (@IYear=0)or(@IMonth=0)or(@IDay=0)
Set @CDate=Null
else
Set @CDate=@CMonth+'/'+@CDay+'/'+@CYear
Set @Res=Cast(@CDate As DateTime)
Return @Res
End

Добавлено: 25 авг 2006, 02:26
Screw
Для справки: Атлантис хранит даты в виде упакованной в длинное целое (32-битное) записи следующего вида:

Код: Выделить всё

DateRec=record
  Day   :ShortInt;
  Month :ShortInt;
  Year  :Integer;
 end;

Добавлено: 25 сен 2006, 09:44
lingreen
Можно в делфях быстро написать
procedure TForm1.Button1Click(Sender: TObject);
var
date:integer;
Year:word;
Month,Day:byte;
begin
date:=StrToint(e.Text);
Year:=Date shr 16;
Month:=(date shr 8) and 255 ;
Day:=date and 255;
Memo1.Lines.Add(InttoStr(Day)+'/'+IntTostr(Month)+'/'+InttoStr(Year))

end;

procedure TForm1.Button2Click(Sender: TObject);
var
DateX:string;
res:integer;
year:word;
Day,Month:byte;
i:integer;
begin
DateX:=e.Text;
i:=pos('.',dateX);
day:=StrToint(Copy(DateX,1,i-1));
Delete(DateX,1,i);
i:=pos('.',dateX);
Month:=StrToint(Copy(DateX,1,i-1));
Delete(DateX,1,i);
Year:=StrToInt(DateX);
res:=day or (month shl 8) or (year shl 16);
memo1.Lines.Add(IntToStr(res));
end;