Crear unix fechas
Esta unidad proporciona acceso a UNIX funciones relacionadas con fechas y procedimientos
Colaborador: BRIAN STARK
(***************************************************************************)
(* UNIX FECHA de la Versión 1.01 *)
(* Esta unidad proporciona acceso a UNIX fecha relacionados con las funciones y procedimientos *)
(* UNIX fecha es el número de segundos desde el 1 de enero de 1970. Esta unidad *)
(* pueden ser utilizados libremente. Si usted modificar el código fuente, por favor no *)
(* distribuir sus mejoras. *)
(* (C) 1991-1993 por Brian Stark. *)
(* Esta es una programación de lanzamiento de Digital Illusions *)
(* FidoNet 1:289/27.2 Columbia, MO - USA *)
(* Revisión de la Historia *)
(* & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - *)
(* 06-13-1993 1.02 | Menor de limpieza de código *)
(* 05-23-1993 1.01 | Añadido un par más rutinas para el uso con la Visión BBS *)
(* ??-??-1991 1.00 | Primera versión *)
(* & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - *)
(***************************************************************************)
INTERFAZ
Usos
DOS
la Función de GetTimeZone : ShortInt
{Devuelve el valor de la variable de entorno 'TZ'. Si no se encuentra, es UTC
se supone, y un valor de cero, se devuelve}
Función IsLeapYear(Fuente : Word) : Boolean
{Determina si el año es bisiesto o no}
Función Norm2Unix(Y, M, D, H, Min, S : Word) : LongInt
{Convertir una fecha normal para su UNIX fecha. Si la variable de entorno 'TZ' es
se define, entonces los parámetros de entrada se supone que en ****}
Procedimiento Unix2Norm(Fecha : LongInt Var Y, M, D, H, Min, S : Palabra)
{Convertir un UNIX fecha de su fecha normal de contraparte. Si el medio ambiente
variable 'TZ' se define, entonces la salida será en*****}
la Función de TodayInUnix : LongInt
{Presenta hoy & #39 s fecha, y las llamadas Norm2Unix}
{
Siguiente devuelve una cadena y requiere la TechnoJock totSTR de la unidad.
Función Unix2Str(N : LongInt) : String
}
Const
DaysPerMonth :
Array[1..12] de ShortInt = (031,028,031,030,031,030,031,031,030,031,030,031)
DaysPerYear :
Array[1..12] of Integer = (031,059,090,120,151,181,212,243,273,304,334,365)
DaysPerLeapYear :
Array[1..12] of Integer = (031,060,091,121,152,182,213,244,274,305,335,366)
SecsPerYear : LongInt = 31536000
SecsPerLeapYear : LongInt = 31622400
SecsPerDay : LongInt = 86400
SecsPerHour : Integer = 3600
SecsPerMinute : ShortInt = 60
APLICACIÓN
la Función de GetTimeZone : ShortInt
Var
Entorno : String
Index : Integer
Begin
GetTimeZone := 0 {Asumir UTC}
Entorno := GetEnv( & #39 TZ & #39 ) {Agarrar TZ string}
Index := 1 To Length(medio Ambiente)
el medio Ambiente[Índice] := Upcase(medio Ambiente[Index])
(*
NOTA: todavía tengo que encontrar una lista completa de la ISO de la tabla de la zona de tiempo
abreviaturas. El siguiente es un extracto de la Opus-Cbc
los archivos de documentación.
*)
Si el Entorno = & #39 EST05 & #39 GetTimeZone := -05 {USA ORIENTAL}
Si el Entorno = & #39 EST05EDT & #39 GetTimeZone := -06
Si el Entorno = & #39 CST06 & #39 GetTimeZone := -06 {CENTRAL de los EEUU}
Si el Entorno = & #39 CST06CDT & #39 GetTimeZone := -07
Si el Entorno = & #39 MST07 & #39 GetTimeZone := -07 {estados UNIDOS de MONTAÑA}
Si el Entorno = & #39 MST07MDT & #39 GetTimeZone := -08
Si el Entorno = & #39 PST08 & #39 GetTimeZone := -08
Si el Entorno = & #39 PST08PDT & #39 GetTimeZone := -09
Si el Entorno = & #39 YST09 & #39 GetTimeZone := -09
Si el Entorno = & #39 AST10 & #39 GetTimeZone := -10
Si el Entorno = & #39 BST11 & #39 GetTimeZone := -11
Si el Entorno = & #39 CET-1 & #39 GetTimeZone := 01
Si el Entorno = & #39 CET-01 & #39 GetTimeZone := 01
Si el Entorno = & #39 EST-10 & #39 GetTimeZone := 10
Si el Entorno = & #39 WST-8 & #39 GetTimeZone := 08 {Perth, Western australia dispone}
Si el Entorno = & #39 WST-08 & #39 GetTimeZone := 08
Fin
la Función de IsLeapYear(Fuente : Word) : Boolean
Begin
(*
NOTA: Esto está mal!
*)
Si (Fuente Mod 4 = 0) Entonces
IsLeapYear := True
Else
IsLeapYear := False
Fin
la Función de Norm2Unix(Y,M,D,H,Min,S : Word) : LongInt
Var
UnixDate : LongInt
Índice : Word
Begin
UnixDate := 0 {inicializar}
Inc(UnixDate,S) {agregar segundos}
Inc(UnixDate,(SecsPerMinute * Min)) {agregar minutos}
Inc(UnixDate,(SecsPerHour * H)) {agregar horas}
(*************************************************************************)
(* Si UTC = 0, y la hora local es -06 horas de la UTC, a continuación,*)
(* UTC := UTC - (-06 * SecsPerHour) *)
(* Recuerde que un negativo # menos negativo # se obtiene un valor positivo *)
(*************************************************************************)
UnixDate := UnixDate - (GetTimeZone * SecsPerHour) {desplazamiento de UTC}
Si D > 1, Entonces {tiene un día ya pasado?}
Inc(UnixDate,(SecsPerDay * (D-1)))
Si IsLeapYear(Y) Entonces
DaysPerMonth[02] := 29
Else
DaysPerMonth[02] := 28 {Verificación de Febrero. 29}
Index := 1
Si M > 1, Entonces Para Índice := 1 A (M-1) Do {dispone de un mes ya ha pasado?}
Inc(UnixDate,(DaysPerMonth[Índice] * SecsPerDay))
Mientras que Y > 1970
Begin
Si IsLeapYear((Y-1)) Entonces
Inc(UnixDate,SecsPerLeapYear)
Else
Inc(UnixDate,SecsPerYear)
Dec(Y,1)
Fin
Norm2Unix := UnixDate
Fin
Procedimiento Unix2Norm(Fecha : LongInt Var Y, M, D, H, Min, S : Palabra)
{}
Var
LocalDate : LongInt
Hecho : Boolean
X : ShortInt
TotDays : Integer
Begin
Y := 1970
M := 1
D := 1
H := 0
Min := 0
S := 0
LocalDate := Fecha (GetTimeZone * SecsPerHour) {hora Local de fecha}
(*************************************************************************)
(* Barrido de los años... *)
(*************************************************************************)
Hecho := False
Mientras que No se Hace
Begin
Si LocalDate >= SecsPerYear, a Continuación,
Begin
Inc(Y,1)
Dec(LocalDate,SecsPerYear)
Fin
Else
Hecho := True
Si (IsLeapYear(Y 1)) Y (LocalDate >= SecsPerLeapYear) Y
(No se Hace), a Continuación,
Begin
Inc(Y,1)
Dec(LocalDate,SecsPerLeapYear)
Fin
Fin
(*************************************************************************)
M := 1
D := 1
Hecho := False
TotDays := LocalDate Div SecsPerDay
Si IsLeapYear(Y) A continuación,
Begin
DaysPerMonth[02] := 29
X := 1
Repetir
Si (TotDays <= DaysPerLeapYear[x]) Entonces
Begin
M := X
Hecho := True
Dec(LocalDate,(TotDays * SecsPerDay))
D := DaysPerMonth[M]-(DaysPerLeapYear[M]-TotDays) 1
Fin
Else
Hecho := False
Inc(X)
Hasta que (de Hecho) o (X > 12)
Fin
Else
Begin
DaysPerMonth[02] := 28
X := 1
Repetir
Si (TotDays <= DaysPerYear[x]) A continuación,
Begin
M := X
Hecho := True
Dec(LocalDate,(TotDays * SecsPerDay))
D := DaysPerMonth[M]-(DaysPerYear[M]-TotDays) 1
Fin
Else
Hecho := False
Inc(X)
Hasta Hace = True o (X > 12)
Fin
H := LocalDate Div SecsPerHour
Dec(LocalDate,(H * SecsPerHour))
Min := LocalDate Div SecsPerMinute
Dec(LocalDate,(Min * SecsPerMinute))
S := LocalDate
Fin
la Función de TodayInUnix : LongInt
Var
Año, Mes, Día, DayOfWeek: La palabra
Hora, Minuto, Segundo, Sec100: Word
Begin
GetDate(Año, Mes, Día, DayOfWeek)
GetTime(Hora, Minuto, Segundo, Sec100)
TodayInUnix := Norm2Unix(Año,Mes,Día,Hora,Minuto,Segundo)
Fin
la Función de Unix2Str(N : LongInt) : String
Var
Año, Mes, Día, DayOfWeek : Word
Hora, Minuto, Segundo, Sec100 : Word
T : String
Begin
Unix2Norm(N, Año, Mes, Día, Hora, Minuto, Segundo)
T := PadRight(IntToStr(Mes),2, & #39 0 & #39 ) & #39 & -#39 PadRight(IntToStr(Día),2, & #39 0 & #39 ) & #39 & -#39
PadRight(IntToStr(Año),2, & #39 0 & #39 ) & #39 & #39 PadRight(IntToStr(Hora),2, & #39 0 & #39 ) & #39 : & #39
PadRight(IntToStr(Minuto),2, & #39 0 & #39 ) & #39 : & #39 PadRight(IntToStr(Segunda),2, & #39 0 & #39 )
Si la Hora > 12 y
T := T & #39 PM & #39
Else
T := T & #39 AM & #39
Unix2Str := T
Fin
.
Crear unix fechas
Crear unix fechas : Multi-millones de consejos para hacer su vida mas facil.
Esta unidad proporciona acceso a UNIX funciones relacionadas con fechas y procedimientos
Colaborador: BRIAN STARK
(***************************************************************************)
(* UNIX FECHA de la Version 1.01 *)
(* Esta unidad proporciona acceso a UNIX fecha relacionados con las funciones y procedimientos *)
(* UNIX fecha es el numero de segundos desde el 1 de enero de 1970. Esta unidad *)
(* pueden ser utilizados libremente. Si usted modificar el codigo fuente, por favor no *)
(* distribuir sus mejoras. *)
(* (C) 1991-1993 por Brian Stark. *)
(* Esta es una programacion de lanzamiento de Digital Illusions *)
(* FidoNet 1:289/27.2 Columbia, MO - USA *)
(* Revision de la Historia *)
(* & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - *)
(* 06-13-1993 1.02 | Menor de limpieza de codigo *)
(* 05-23-1993 1.01 | Añadido un par mas rutinas para el uso con la Vision BBS *)
(* ??-??-1991 1.00 | Primera version *)
(* & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - *)
(***************************************************************************)
INTERFAZ
Usos
DOS
la Funcion de GetTimeZone : ShortInt
{Devuelve el valor de la variable de entorno 'TZ'. Si no se encuentra, es UTC
se supone, y un valor de cero, se devuelve}
Funcion IsLeapYear(Fuente : Word) : Boolean
{Determina si el año es bisiesto o no}
Funcion Norm2Unix(Y, M, D, H, Min, S : Word) : LongInt
{Convertir una fecha normal para su UNIX fecha. Si la variable de entorno 'TZ' es
se define, entonces los parametros de entrada se supone que en ****}
Procedimiento Unix2Norm(Fecha : LongInt Var Y, M, D, H, Min, S : Palabra)
{Convertir un UNIX fecha de su fecha normal de contraparte. Si el medio ambiente
variable 'TZ' se define, entonces la salida sera en*****}
la Funcion de TodayInUnix : LongInt
{Presenta hoy & #39 s fecha, y las llamadas Norm2Unix}
{
Siguiente devuelve una cadena y requiere la TechnoJock totSTR de la unidad.
Funcion Unix2Str(N : LongInt) : String
}
Const
DaysPerMonth :
Array[1..12] de ShortInt = (031,028,031,030,031,030,031,031,030,031,030,031)
DaysPerYear :
Array[1..12] of Integer = (031,059,090,120,151,181,212,243,273,304,334,365)
DaysPerLeapYear :
Array[1..12] of Integer = (031,060,091,121,152,182,213,244,274,305,335,366)
SecsPerYear : LongInt = 31536000
SecsPerLeapYear : LongInt = 31622400
SecsPerDay : LongInt = 86400
SecsPerHour : Integer = 3600
SecsPerMinute : ShortInt = 60
APLICACION
la Funcion de GetTimeZone : ShortInt
Var
Entorno : String
Index : Integer
Begin
GetTimeZone := 0 {Asumir UTC}
Entorno := GetEnv( & #39 TZ & #39 ) {Agarrar TZ string}
Index := 1 To Length(medio Ambiente)
el medio Ambiente[Indice] := Upcase(medio Ambiente[Index])
(*
NOTA: todavia tengo que encontrar una lista completa de la ISO de la tabla de la zona de tiempo
abreviaturas. El siguiente es un extracto de la Opus-Cbc
los archivos de documentacion.
*)
Si el Entorno = & #39 EST05 & #39 GetTimeZone := -05 {USA ORIENTAL}
Si el Entorno = & #39 EST05EDT & #39 GetTimeZone := -06
Si el Entorno = & #39 CST06 & #39 GetTimeZone := -06 {CENTRAL de los EEUU}
Si el Entorno = & #39 CST06CDT & #39 GetTimeZone := -07
Si el Entorno = & #39 MST07 & #39 GetTimeZone := -07 {estados UNIDOS de MONTAÑA}
Si el Entorno = & #39 MST07MDT & #39 GetTimeZone := -08
Si el Entorno = & #39 PST08 & #39 GetTimeZone := -08
Si el Entorno = & #39 PST08PDT & #39 GetTimeZone := -09
Si el Entorno = & #39 YST09 & #39 GetTimeZone := -09
Si el Entorno = & #39 AST10 & #39 GetTimeZone := -10
Si el Entorno = & #39 BST11 & #39 GetTimeZone := -11
Si el Entorno = & #39 CET-1 & #39 GetTimeZone := 01
Si el Entorno = & #39 CET-01 & #39 GetTimeZone := 01
Si el Entorno = & #39 EST-10 & #39 GetTimeZone := 10
Si el Entorno = & #39 WST-8 & #39 GetTimeZone := 08 {Perth, Western australia dispone}
Si el Entorno = & #39 WST-08 & #39 GetTimeZone := 08
Fin
la Funcion de IsLeapYear(Fuente : Word) : Boolean
Begin
(*
NOTA: Esto esta mal!
*)
Si (Fuente Mod 4 = 0) Entonces
IsLeapYear := True
Else
IsLeapYear := False
Fin
la Funcion de Norm2Unix(Y,M,D,H,Min,S : Word) : LongInt
Var
UnixDate : LongInt
Indice : Word
Begin
UnixDate := 0 {inicializar}
Inc(UnixDate,S) {agregar segundos}
Inc(UnixDate,(SecsPerMinute * Min)) {agregar minutos}
Inc(UnixDate,(SecsPerHour * H)) {agregar horas}
(*************************************************************************)
(* Si UTC = 0, y la hora local es -06 horas de la UTC, a continuacion,*)
(* UTC := UTC - (-06 * SecsPerHour) *)
(* Recuerde que un negativo # menos negativo # se obtiene un valor positivo *)
(*************************************************************************)
UnixDate := UnixDate - (GetTimeZone * SecsPerHour) {desplazamiento de UTC}
Si D > 1, Entonces {tiene un dia ya pasado?}
Inc(UnixDate,(SecsPerDay * (D-1)))
Si IsLeapYear(Y) Entonces
DaysPerMonth[02] := 29
Else
DaysPerMonth[02] := 28 {Verificacion de Febrero. 29}
Index := 1
Si M > 1, Entonces Para Indice := 1 A (M-1) Do {dispone de un mes ya ha pasado?}
Inc(UnixDate,(DaysPerMonth[Indice] * SecsPerDay))
Mientras que Y > 1970
Begin
Si IsLeapYear((Y-1)) Entonces
Inc(UnixDate,SecsPerLeapYear)
Else
Inc(UnixDate,SecsPerYear)
Dec(Y,1)
Fin
Norm2Unix := UnixDate
Fin
Procedimiento Unix2Norm(Fecha : LongInt Var Y, M, D, H, Min, S : Palabra)
{}
Var
LocalDate : LongInt
Hecho : Boolean
X : ShortInt
TotDays : Integer
Begin
Y := 1970
M := 1
D := 1
H := 0
Min := 0
S := 0
LocalDate := Fecha (GetTimeZone * SecsPerHour) {hora Local de fecha}
(*************************************************************************)
(* Barrido de los años... *)
(*************************************************************************)
Hecho := False
Mientras que No se Hace
Begin
Si LocalDate >= SecsPerYear, a Continuacion,
Begin
Inc(Y,1)
Dec(LocalDate,SecsPerYear)
Fin
Else
Hecho := True
Si (IsLeapYear(Y 1)) Y (LocalDate >= SecsPerLeapYear) Y
(No se Hace), a Continuacion,
Begin
Inc(Y,1)
Dec(LocalDate,SecsPerLeapYear)
Fin
Fin
(*************************************************************************)
M := 1
D := 1
Hecho := False
TotDays := LocalDate Div SecsPerDay
Si IsLeapYear(Y) A continuacion,
Begin
DaysPerMonth[02] := 29
X := 1
Repetir
Si (TotDays <= DaysPerLeapYear[x]) Entonces
Begin
M := X
Hecho := True
Dec(LocalDate,(TotDays * SecsPerDay))
D := DaysPerMonth[M]-(DaysPerLeapYear[M]-TotDays) 1
Fin
Else
Hecho := False
Inc(X)
Hasta que (de Hecho) o (X > 12)
Fin
Else
Begin
DaysPerMonth[02] := 28
X := 1
Repetir
Si (TotDays <= DaysPerYear[x]) A continuacion,
Begin
M := X
Hecho := True
Dec(LocalDate,(TotDays * SecsPerDay))
D := DaysPerMonth[M]-(DaysPerYear[M]-TotDays) 1
Fin
Else
Hecho := False
Inc(X)
Hasta Hace = True o (X > 12)
Fin
H := LocalDate Div SecsPerHour
Dec(LocalDate,(H * SecsPerHour))
Min := LocalDate Div SecsPerMinute
Dec(LocalDate,(Min * SecsPerMinute))
S := LocalDate
Fin
la Funcion de TodayInUnix : LongInt
Var
Año, Mes, Dia, DayOfWeek: La palabra
Hora, Minuto, Segundo, Sec100: Word
Begin
GetDate(Año, Mes, Dia, DayOfWeek)
GetTime(Hora, Minuto, Segundo, Sec100)
TodayInUnix := Norm2Unix(Año,Mes,Dia,Hora,Minuto,Segundo)
Fin
la Funcion de Unix2Str(N : LongInt) : String
Var
Año, Mes, Dia, DayOfWeek : Word
Hora, Minuto, Segundo, Sec100 : Word
T : String
Begin
Unix2Norm(N, Año, Mes, Dia, Hora, Minuto, Segundo)
T := PadRight(IntToStr(Mes),2, & #39 0 & #39 ) & #39 & -#39 PadRight(IntToStr(Dia),2, & #39 0 & #39 ) & #39 & -#39
PadRight(IntToStr(Año),2, & #39 0 & #39 ) & #39 & #39 PadRight(IntToStr(Hora),2, & #39 0 & #39 ) & #39 : & #39
PadRight(IntToStr(Minuto),2, & #39 0 & #39 ) & #39 : & #39 PadRight(IntToStr(Segunda),2, & #39 0 & #39 )
Si la Hora > 12 y
T := T & #39 PM & #39
Else
T := T & #39 AM & #39
Unix2Str := T
Fin
.
Crear unix fechas
By Consejos Y Trucos
Crear unix fechas : Multi-millones de consejos para hacer su vida más fácil.