Créer unix dates


Cette unité fournit l'accès à UNIX liées à la date de fonctions et de procédures

l'auteur: BRIAN STARK

(***************************************************************************)
(* UNIX DATE de la Version 1.01 *)
(* Cet appareil permet d'accéder à UNIX liées à la date de fonctions et procédures *)
(* UNIX date est le nombre de secondes depuis le 1er janvier 1970. Cette unité *)
(* peut être utilisé librement. Si vous modifiez le code source, s'il vous plaît ne pas *)
(* diffuser vos améliorations. *)
(* (C) 1991-1993 par Brian Stark. *)
(* C'est une programmation à la libération de Digital Illusions *)
(* FidoNet 1:289/27.2-Britannique, MO - états-unis *)
(* Historique des révisions *)
(* & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - *)
(* 06-13-1993 1.02 | code Mineur de nettoyage *)
(* 05-23-1993 1.01 | Ajouté un peu plus de routines pour une utilisation avec la ViSiON BBS *)
(* ??-??-1991 1.00 | Première version *)
(* & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - *)
(***************************************************************************)

INTERFACE

Utilise
DOS

la Fonction GetTimeZone : type shortint
{Retourne la valeur de la variable d'environnement 'TZ'. Si pas trouvé, UTC
assumé, et une valeur de zéro est renvoyée}
Fonction de IsLeapYear(Source : Word) : Boolean
{Détermine si l'année est une année bissextile ou non}
Fonction de Norm2Unix(Y, M, D, H, Min, S : Mot) : LongInt
{Convertir une date normale de son UNIX date. Si la variable d'environnement 'TZ' est
est défini, les paramètres d'entrée sont supposées être en ****}
Procédure Unix2Norm(Date : LongInt Var Y, M, D, H, Min, S : Mot)
{Convertir un UNIX date de sa date normale de contrepartie. Si l'environnement
variable 'TZ' est définie, alors la sortie sera en*****}

la Fonction TodayInUnix : LongInt
{Obtient aujourd'hui & #39 date de, et des appels Norm2Unix}
{
Suivant retourne une chaîne de caractères et nécessite la TechnoJock totSTR unité.
Fonction de Unix2Str(N : LongInt) : String
}
Const
DaysPerMonth :
Tableau[1..12] de type shortint = (031,028,031,030,031,030,031,031,030,031,030,031)
DaysPerYear :
Tableau[1..12] of Integer = (031,059,090,120,151,181,212,243,273,304,334,365)
DaysPerLeapYear :
Tableau[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 : Entier = 3600
SecsPerMinute : type shortint = 60

la mise en ŒUVRE

la Fonction GetTimeZone : type shortint
Var
Environnement : String
Index : Integer
Begin
GetTimeZone := 0 {Assumer UTC}
Environnement := GetEnv( & #39 TZ & #39 ) {Saisir TZ string}
Indice := 1 to Length(Environnement) Ne
Environnement[Index] := Upcase(Environnement[Index])
(*
NOTE: je n'ai pas encore trouver la liste complète de la norme ISO table de fuseau horaire
abréviations. Le texte suivant est extrait de l'Opus-Cbcs
les fichiers de documentation.
*)
Si l'Environnement = & #39 EST05 & #39 GetTimeZone := -05 {etats-unis ORIENTALE}
Si l'Environnement = & #39 EST05EDT & #39 GetTimeZone := -06
Si l'Environnement = & #39 CST06 & #39 GetTimeZone := -06 {etats-unis CENTRAL}
Si l'Environnement = & #39 CST06CDT & #39 GetTimeZone := -07
Si l'Environnement = & #39 MST07 & #39 GetTimeZone := -07 {etats-unis MONTAGNE}
Si l'Environnement = & #39 MST07MDT & #39 GetTimeZone := -08
Si l'Environnement = & #39 PST08 & #39 GetTimeZone := -08
Si l'Environnement = & #39 PST08PDT & #39 GetTimeZone := -09
Si l'Environnement = & #39 YST09 & #39 GetTimeZone := -09
Si l'Environnement = & #39 AST10 & #39 GetTimeZone := -10
Si l'Environnement = & #39 BST11 & #39 GetTimeZone := -11
Si l'Environnement = & #39 CET-1 & #39 GetTimeZone := 01
Si l'Environnement = & #39 CET-01 & #39 GetTimeZone := 01
Si l'Environnement = & #39 HNE-10 & #39 GetTimeZone := 10
Si l'Environnement = & #39 WST-8 & #39 GetTimeZone := 08 {Perth, dans l'Ouest Austrailia}
Si l'Environnement = & #39 WST-08 & #39 GetTimeZone := 08
Fin

la Fonction IsLeapYear(Source : Word) : Boolean
Begin
(*
NOTE: C'est une erreur!
*)
If (Source Mod 4 = 0) Then
IsLeapYear := True
Else
IsLeapYear := False
Fin

la Fonction Norm2Unix(Y,M,D,H,Min,S : Mot) : LongInt
Var
UnixDate : LongInt
Indice : le Mot
Begin
UnixDate := 0 {initialiser}
Inc(UnixDate,S) {ajouter des secondes}
Inc(UnixDate,(SecsPerMinute * Min)) {ajouter des minutes}
Inc(UnixDate,(SecsPerHour * H)) {ajouter des heures de travail}
(*************************************************************************)
(* Si l'heure UTC = 0, et l'heure locale est -06 heures UTC, puis *)
(* UTC := UTC - (-06 * SecsPerHour) *)
(* n'oubliez pas que négatif # moins négatif # donne une valeur positive *)
(*************************************************************************)
UnixDate := UnixDate - (GetTimeZone * SecsPerHour) {décalage UTC}

Si D > 1 Alors {a, un jour, déjà passée?}
Inc(UnixDate,(SecsPerDay * (D-1)))

Si IsLeapYear(Y),
DaysPerMonth[02] := 29
Else
DaysPerMonth[02] := 28 {Case pour Févr. 29}

Index := 1
Si M > 1, Alors Pour Index := 1 À (M-1) Do {a un mois déjà passée?}
Inc(UnixDate,(DaysPerMonth[Index] * SecsPerDay))

Alors que Y > 1970 N'
Begin
Si IsLeapYear((Y-1))
Inc(UnixDate,SecsPerLeapYear)
Else
Inc(UnixDate,SecsPerYear)
Dec(Y,1)
Fin

Norm2Unix := UnixDate
Fin

Procédure Unix2Norm(Date : LongInt Var Y, M, D, H, Min, S : Mot)
{}
Var
LocalDate : LongInt
Fait : Boolean
X : type shortint
TotDays : Integer
Begin
Y := 1970
M := 1
D := 1
H := 0
Min := 0
S := 0
LocalDate := Date (GetTimeZone * SecsPerHour) {heure Locale date}
(*************************************************************************)
(* Balayer les années... *)
(*************************************************************************)
Fait := False
même si elle ne le Fait Pas Faire
Begin
Si LocalDate >= SecsPerYear Puis
Begin
Inc(O,1)
Dec(LocalDate,SecsPerYear)
Fin
Else
Fait := True

Si (IsLeapYear(Y 1)) Et (LocalDate >= SecsPerLeapYear) Et
(Pas Fait).
Begin
Inc(O,1)
Dec(LocalDate,SecsPerLeapYear)
Fin
Fin
(*************************************************************************)
M := 1
D := 1
Fait := False
TotDays := LocalDate Div SecsPerDay
Si IsLeapYear(Y) Puis
Begin
DaysPerMonth[02] := 29
X := 1
Repeat
If (TotDays <= DaysPerLeapYear[x])
Begin
M := X
Fait := True
Dec(LocalDate,(TotDays * SecsPerDay))
D := DaysPerMonth[M]-(DaysPerLeapYear[M]-TotDays) 1
Fin
Else
Fait := False
Inc(X)
Jusqu'à ce que (Fait) ou (X > 12)
Fin
Else
Begin
DaysPerMonth[02] := 28
X := 1
Repeat
If (TotDays <= DaysPerYear[x]) Puis
Begin
M := X
Fait := True
Dec(LocalDate,(TotDays * SecsPerDay))
D := DaysPerMonth[M]-(DaysPerYear[M]-TotDays) 1
Fin
Else
Fait := False
Inc(X)
Jusqu'à ce que Done = True ou (X > 12)
Fin
H := LocalDate Div SecsPerHour
Dec(LocalDate,(H * SecsPerHour))
Min := LocalDate Div SecsPerMinute
Dec(LocalDate,(Min * SecsPerMinute))
S := LocalDate
Fin

la Fonction TodayInUnix : LongInt
Var
l'Année, le Mois, le Jour, DayOfWeek: Mot
Heure, Minute, Seconde, Sec100: Mot
Begin
GetDate(Année, Mois, Jour, DayOfWeek)
GetTime(Heure, Minute, Seconde, Sec100)
TodayInUnix := Norm2Unix(Année,Mois,Jour,Heure,Minute,Seconde)
Fin

la Fonction Unix2Str(N : LongInt) : String
Var
l'Année, Le mois, le Jour, DayOfWeek : Mot
Heure, Minute, Seconde, Sec100 : Mot
T : String
Begin
Unix2Norm(N, Année, Mois, Jour, Heure, Minute, Seconde)
T := PadRight(IntToStr(Mois),2, & #39 0 & #39 ) & #39 & -#39 PadRight(IntToStr(Jour),2, & #39 0 & #39 ) & #39 & -#39
PadRight(IntToStr(Année),2, & #39 0 & #39 ) & #39 & #39 PadRight(IntToStr(Heure),2, & #39 0 & #39 ) & #39 : & #39
PadRight(IntToStr(Minute),2, & #39 0 & #39 ) & #39 : & #39 PadRight(IntToStr(Deuxième),2, & #39 0 & #39 )
Si Heures > 12
T := T & #39 PM & #39
Else
T := T & #39 AM & #39
Unix2Str := T
Fin

à la FIN.









Creer unix dates


Creer unix dates : Plusieurs milliers de conseils pour vous faciliter la vie.


Cette unite fournit l'acces a UNIX liees a la date de fonctions et de procedures

l'auteur: BRIAN STARK

(***************************************************************************)
(* UNIX DATE de la Version 1.01 *)
(* Cet appareil permet d'acceder a UNIX liees a la date de fonctions et procedures *)
(* UNIX date est le nombre de secondes depuis le 1er janvier 1970. Cette unite *)
(* peut etre utilise librement. Si vous modifiez le code source, s'il vous plaît ne pas *)
(* diffuser vos ameliorations. *)
(* (C) 1991-1993 par Brian Stark. *)
(* C'est une programmation a la liberation de Digital Illusions *)
(* FidoNet 1:289/27.2-Britannique, MO - etats-unis *)
(* Historique des revisions *)
(* & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - *)
(* 06-13-1993 1.02 | code Mineur de nettoyage *)
(* 05-23-1993 1.01 | Ajoute un peu plus de routines pour une utilisation avec la ViSiON BBS *)
(* ??-??-1991 1.00 | Premiere version *)
(* & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - *)
(***************************************************************************)

INTERFACE

Utilise
DOS

la Fonction GetTimeZone : type shortint
{Retourne la valeur de la variable d'environnement 'TZ'. Si pas trouve, UTC
assume, et une valeur de zero est renvoyee}
Fonction de IsLeapYear(Source : Word) : Boolean
{Determine si l'annee est une annee bissextile ou non}
Fonction de Norm2Unix(Y, M, D, H, Min, S : Mot) : LongInt
{Convertir une date normale de son UNIX date. Si la variable d'environnement 'TZ' est
est defini, les parametres d'entree sont supposees etre en ****}
Procedure Unix2Norm(Date : LongInt Var Y, M, D, H, Min, S : Mot)
{Convertir un UNIX date de sa date normale de contrepartie. Si l'environnement
variable 'TZ' est definie, alors la sortie sera en*****}

la Fonction TodayInUnix : LongInt
{Obtient aujourd'hui & #39 date de, et des appels Norm2Unix}
{
Suivant retourne une chaîne de caracteres et necessite la TechnoJock totSTR unite.
Fonction de Unix2Str(N : LongInt) : String
}
Const
DaysPerMonth :
Tableau[1..12] de type shortint = (031,028,031,030,031,030,031,031,030,031,030,031)
DaysPerYear :
Tableau[1..12] of Integer = (031,059,090,120,151,181,212,243,273,304,334,365)
DaysPerLeapYear :
Tableau[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 : Entier = 3600
SecsPerMinute : type shortint = 60

la mise en ŒUVRE

la Fonction GetTimeZone : type shortint
Var
Environnement : String
Index : Integer
Begin
GetTimeZone := 0 {Assumer UTC}
Environnement := GetEnv( & #39 TZ & #39 ) {Saisir TZ string}
Indice := 1 to Length(Environnement) Ne
Environnement[Index] := Upcase(Environnement[Index])
(*
NOTE: je n'ai pas encore trouver la liste complete de la norme ISO table de fuseau horaire
abreviations. Le texte suivant est extrait de l'Opus-Cbcs
les fichiers de documentation.
*)
Si l'Environnement = & #39 EST05 & #39 GetTimeZone := -05 {etats-unis ORIENTALE}
Si l'Environnement = & #39 EST05EDT & #39 GetTimeZone := -06
Si l'Environnement = & #39 CST06 & #39 GetTimeZone := -06 {etats-unis CENTRAL}
Si l'Environnement = & #39 CST06CDT & #39 GetTimeZone := -07
Si l'Environnement = & #39 MST07 & #39 GetTimeZone := -07 {etats-unis MONTAGNE}
Si l'Environnement = & #39 MST07MDT & #39 GetTimeZone := -08
Si l'Environnement = & #39 PST08 & #39 GetTimeZone := -08
Si l'Environnement = & #39 PST08PDT & #39 GetTimeZone := -09
Si l'Environnement = & #39 YST09 & #39 GetTimeZone := -09
Si l'Environnement = & #39 AST10 & #39 GetTimeZone := -10
Si l'Environnement = & #39 BST11 & #39 GetTimeZone := -11
Si l'Environnement = & #39 CET-1 & #39 GetTimeZone := 01
Si l'Environnement = & #39 CET-01 & #39 GetTimeZone := 01
Si l'Environnement = & #39 HNE-10 & #39 GetTimeZone := 10
Si l'Environnement = & #39 WST-8 & #39 GetTimeZone := 08 {Perth, dans l'Ouest Austrailia}
Si l'Environnement = & #39 WST-08 & #39 GetTimeZone := 08
Fin

la Fonction IsLeapYear(Source : Word) : Boolean
Begin
(*
NOTE: C'est une erreur!
*)
If (Source Mod 4 = 0) Then
IsLeapYear := True
Else
IsLeapYear := False
Fin

la Fonction Norm2Unix(Y,M,D,H,Min,S : Mot) : LongInt
Var
UnixDate : LongInt
Indice : le Mot
Begin
UnixDate := 0 {initialiser}
Inc(UnixDate,S) {ajouter des secondes}
Inc(UnixDate,(SecsPerMinute * Min)) {ajouter des minutes}
Inc(UnixDate,(SecsPerHour * H)) {ajouter des heures de travail}
(*************************************************************************)
(* Si l'heure UTC = 0, et l'heure locale est -06 heures UTC, puis *)
(* UTC := UTC - (-06 * SecsPerHour) *)
(* n'oubliez pas que negatif # moins negatif # donne une valeur positive *)
(*************************************************************************)
UnixDate := UnixDate - (GetTimeZone * SecsPerHour) {decalage UTC}

Si D > 1 Alors {a, un jour, deja passee?}
Inc(UnixDate,(SecsPerDay * (D-1)))

Si IsLeapYear(Y),
DaysPerMonth[02] := 29
Else
DaysPerMonth[02] := 28 {Case pour Fevr. 29}

Index := 1
Si M > 1, Alors Pour Index := 1 A (M-1) Do {a un mois deja passee?}
Inc(UnixDate,(DaysPerMonth[Index] * SecsPerDay))

Alors que Y > 1970 N'
Begin
Si IsLeapYear((Y-1))
Inc(UnixDate,SecsPerLeapYear)
Else
Inc(UnixDate,SecsPerYear)
Dec(Y,1)
Fin

Norm2Unix := UnixDate
Fin

Procedure Unix2Norm(Date : LongInt Var Y, M, D, H, Min, S : Mot)
{}
Var
LocalDate : LongInt
Fait : Boolean
X : type shortint
TotDays : Integer
Begin
Y := 1970
M := 1
D := 1
H := 0
Min := 0
S := 0
LocalDate := Date (GetTimeZone * SecsPerHour) {heure Locale date}
(*************************************************************************)
(* Balayer les annees... *)
(*************************************************************************)
Fait := False
meme si elle ne le Fait Pas Faire
Begin
Si LocalDate >= SecsPerYear Puis
Begin
Inc(O,1)
Dec(LocalDate,SecsPerYear)
Fin
Else
Fait := True

Si (IsLeapYear(Y 1)) Et (LocalDate >= SecsPerLeapYear) Et
(Pas Fait).
Begin
Inc(O,1)
Dec(LocalDate,SecsPerLeapYear)
Fin
Fin
(*************************************************************************)
M := 1
D := 1
Fait := False
TotDays := LocalDate Div SecsPerDay
Si IsLeapYear(Y) Puis
Begin
DaysPerMonth[02] := 29
X := 1
Repeat
If (TotDays <= DaysPerLeapYear[x])
Begin
M := X
Fait := True
Dec(LocalDate,(TotDays * SecsPerDay))
D := DaysPerMonth[M]-(DaysPerLeapYear[M]-TotDays) 1
Fin
Else
Fait := False
Inc(X)
Jusqu'a ce que (Fait) ou (X > 12)
Fin
Else
Begin
DaysPerMonth[02] := 28
X := 1
Repeat
If (TotDays <= DaysPerYear[x]) Puis
Begin
M := X
Fait := True
Dec(LocalDate,(TotDays * SecsPerDay))
D := DaysPerMonth[M]-(DaysPerYear[M]-TotDays) 1
Fin
Else
Fait := False
Inc(X)
Jusqu'a ce que Done = True ou (X > 12)
Fin
H := LocalDate Div SecsPerHour
Dec(LocalDate,(H * SecsPerHour))
Min := LocalDate Div SecsPerMinute
Dec(LocalDate,(Min * SecsPerMinute))
S := LocalDate
Fin

la Fonction TodayInUnix : LongInt
Var
l'Annee, le Mois, le Jour, DayOfWeek: Mot
Heure, Minute, Seconde, Sec100: Mot
Begin
GetDate(Annee, Mois, Jour, DayOfWeek)
GetTime(Heure, Minute, Seconde, Sec100)
TodayInUnix := Norm2Unix(Annee,Mois,Jour,Heure,Minute,Seconde)
Fin

la Fonction Unix2Str(N : LongInt) : String
Var
l'Annee, Le mois, le Jour, DayOfWeek : Mot
Heure, Minute, Seconde, Sec100 : Mot
T : String
Begin
Unix2Norm(N, Annee, Mois, Jour, Heure, Minute, Seconde)
T := PadRight(IntToStr(Mois),2, & #39 0 & #39 ) & #39 & -#39 PadRight(IntToStr(Jour),2, & #39 0 & #39 ) & #39 & -#39
PadRight(IntToStr(Annee),2, & #39 0 & #39 ) & #39 & #39 PadRight(IntToStr(Heure),2, & #39 0 & #39 ) & #39 : & #39
PadRight(IntToStr(Minute),2, & #39 0 & #39 ) & #39 : & #39 PadRight(IntToStr(Deuxieme),2, & #39 0 & #39 )
Si Heures > 12
T := T & #39 PM & #39
Else
T := T & #39 AM & #39
Unix2Str := T
Fin

a la FIN.


Créer unix dates

Créer unix dates : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation