Al desarrollar aplicaciones, a menudo es necesario obtener la hora actual del sistema. Aunque el Y2K parece haber pasado sin problemas, aún debemos tener cuidado con el tema del "timing" en nuestras aplicaciones recientemente desarrolladas.
La página 89 de "Integración - Habilidades prácticas de Delphi 4.0" (en adelante, "el libro") presenta específicamente dos métodos para obtener la hora actual del sistema, pero ambos métodos tienen deficiencias o errores, que se analizarán a continuación.
El primer método de este libro es utilizar la función Time() para obtener la hora actual del sistema, y el resultado devuelto es una variable del tipo de estructura TDateTime. Por ejemplo:
Procedimiento TForm1.Button2Click(Remitente: TObject);
var
FechaHora:TDateHora;
comenzar
FechaHora:=Hora();
Leyenda:=DateToStr(DateTime)+' '+TimeToStr(DateTime);
fin;
Pero no importa cuál sea la fecha, el resultado es 99-12-30 xx:xx:xx. Obviamente la fecha es incorrecta. Al analizar la ayuda de Delphi, Time() se usa para devolver la "hora - horas, minutos y segundos" correcta, es decir, TimeToStr (DateTime), y no debe usarse para devolver "fecha". De hecho, la única función del sistema utilizada para devolver fechas es Fecha.
Entonces, ¿qué puede devolver la "hora, minuto, segundo" correcto y el "año, mes, día" correcto? Puede utilizar la función Ahora, por ejemplo:
procedimiento TForm1.Button1Click(Remitente: TObject);
var
mihora: TDateTime;
comenzar
mihora:=Ahora;
Leyenda:=DateToStr(mihora)+' '+TimeToStr(mihora);
//O usar Caption directamente := DateTimeToStr(Now);
fin;
El formato de fecha devuelto por Now solo tiene 2 dígitos para el año, es decir, el año 2000 se muestra como 00, lo que parece insatisfactorio. Además, Now y Time solo pueden obtener la hora con una precisión de segundos. tiempo de nivel de milisegundos. Puede utilizar la función API GetSystemTime y su tipo TSystemTime correspondiente se define como:
TSystemTime = registro
wAño: Palabra;
wMes: Palabra;
wDayOfWeek: Palabra;
wDía: Palabra;
wHora: Palabra;
wMinuto: Palabra;
wSegundo: Palabra;
wMilisegundos: Palabra;
fin;
Obviamente, su estructura también se puede usar convenientemente en la lógica del programa para formar el tiempo (varios valores de tiempo), por lo que usar la función GetSystemTime tiene grandes ventajas. Sin embargo, el uso de esta función en el libro es incorrecto. Consultando la ayuda del SDK de Windows, podemos ver que el prototipo de esta función es:
VOID GetSystemTime (LPSYSTEMTIME lpst), el puntero del parámetro lpst obtiene la hora del sistema, por lo que se puede implementar como el siguiente segmento de programa:
procedimiento TForm1.Button3Click(Remitente: TObject);
var
SysTime: TsystemTime;
comenzar
ObtenerSystemTime(SysTime);
Leyenda:=IntToStr(SysTime.wYear)+' '+IntToStr(SysTime.wMonth);
//si SysTime.wYear>2000 entonces
//...Utiliza los distintos valores de tiempo obtenidos en la lógica del programa.
fin;
Según la discusión anterior, es más conveniente y flexible obtener la hora actual del sistema usando la función GetSystemTime.