Как закодировать дату и время в delphi - PullRequest
5 голосов
/ 19 ноября 2009

Я знаю, как использовать кодирование в Delphi для кодирования отдельных YY, MM и DD в поле даты и времени или использовать кодирование времени для кодирования отдельных HH, SS, MM и MS в поле даты и времени, но есть ли способ указать дату и время в поле даты и времени?

Coz с кодированным, я не могу указать время и с кодированным временем, я не могу указать дату ...

например. как я могу установить поле даты и времени на 2009-11-28 14: 23: 12.000

Пожалуйста, помогите.

Спасибо.

Ответы [ 2 ]

31 голосов
/ 19 ноября 2009

Попробуйте использовать функцию EncodeDateTime , объявленную в модуле DateUtils.

function EncodeDateTime(const AYear: Word;
    const AMonth: Word;
    const ADay: Word;
    const AHour: Word;
    const AMinute: Word;
    const ASecond: Word;
    const AMilliSecond: Word): TDateTime;

См. Этот пример

uses
DateUtils;

var
  myDateTime : TDateTime;

begin

 //Your Code
 myDateTime := EncodeDateTime(2009, 11, 28, 14, 23, 12, 000);
 //Your Code


End;

Другой вариант

uses
SysUtils;

var
myDateTime : TDateTime;
begin
 //Your Code
 myDateTime:= EncodeDate(2009,11,28)+EncodeTime(14,23,12,000);
 //Your Code    
end;

Второй вариант работает, потому что TDatetime Он хранится как двойной (TDateTime = type Double;), с датой как неотъемлемой частью (функция EncodeDate возвращает интеграл), и время как дробная часть.

Часть даты TDateTime представляет количество дней, прошедших с 30.12.1899. TDateTime может быть любой датой до 31 декабря 9999 года (десятичное значение 2 958 465), значения TDateTime также могут быть отрицательными. Десятичное значение -693593 соответствует 1 января 0001 года.

см. Примеры работ

var
myDateTime : TDateTime;

Begin
myDateTime :=0; //represents 12/30/1899
myDateTime :=1; //represents 12/31/1899
myDateTime :=-1; //represents 12/29/1899
myDateTime :=-693593; //represents 01/01/0001
myDateTime := Now(); //assign the current date and time to myDateTime 

myDateTime:=Trunc(Now()); //Extract only the date part.

myDateTime:=Frac(Now()); //Extract only the time part.

myDateTime :=Now() + 1;// Add a day to the current datetime


End;

Важное примечание с сайта embarcadero:

Чтобы найти дробное число дней между двумя датами, просто вычтите два значения, если одно из Значения System.TDateTime отрицательны. Точно так же, чтобы увеличить дату и значение времени на определенный дробный количество дней, добавить дробное число к значению даты и времени, если значение System.TDateTime положительны.

при работе с негативом Значения System.TDateTime, вычисления должен обрабатывать часть времени отдельно . Дробная часть отражает доля 24-часового дня без что касается знака Значение System.TDateTime. Например, 6:00 утра 29.12.1999 - –1,25, а не –1 + 0,25, что будет –0,75. Между значениями System.TDateTime нет –1 и 0.

для дополнительной информации вы можете увидеть эту ссылку

0 голосов
/ 16 сентября 2016

Состояния Embarcadero: нет значений System.TDateTime между –1 и 0.

Даже Эмбаркадеро, похоже, не знает. Это также ошибка в их справочном файле из Delphi 7

Должно быть, значения System.TDateTime между 0 и 1 отсутствуют.

dateValue := EncodeDate(1899,12,30);
timeValue := EncodeTime(0,0,1,1);
dateTimeValue := dateValue-timeValue;
dateTimeValue := -1,1585648148e-05
DateTimeToStr(dateTimeValue) -> 30-12-1899 0:00:01

dateValue := EncodeDate(1899,12,30);
timeValue := EncodeTime(23,59,59,999);
dateTimeValue := dateValue-timeValue;
dateTimeValue := -0,99999998843
DateTimeToStr(dateTimeValue) -> 30-12-1899 23:59:59

dateValue := EncodeDate(1899,12,31);
timeValue := EncodeTime(0,0,0,0);
dateTimeValue := dateValue-timeValue;
dateTimeValue := 1
DateTimeToStr(dateTimeValue) -> 31-12-1899

dateValue := EncodeDate(1899,12,31);
timeValue := EncodeTime(0,0,0,0);
dateTimeValue := dateValue+timeValue;
dateTimeValue := 1
DateTimeToStr(dateTimeValue) -> 31-12-1899

dateValue := EncodeDate(1899,12,31);
timeValue := EncodeTime(0,0,0,1);
dateTimeValue := dateValue+timeValue;
dateTimeValue := 1,0000000116
DateTimeToStr(dateTimeValue) -> 31-12-1899

dateValue := EncodeDate(1899,12,31);
timeValue := EncodeTime(23,59,59,999);
dateTimeValue := dateValue+timeValue;
dateTimeValue := 1,99999998843
DateTimeToStr(dateTimeValue) -> 31-12-1899 23:59:59
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...