Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/10/2007, 15h28   #1
Invité de passage
 
Inscription : avril 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 18
Points : 2
Points : 2
Par défaut KSH : Nombre de jours entre 2 dates

Bonjour,
Je suis actuellement en train de développer un script de purge de fichiers.
Pour cela, j'ai besoin de récupérer le nombre de jours entre 2 dates au format 'yyyymmdd'.
Je vous savoir s'il existait un moyen simple pour y remédier.

Merci pour vos réponses
Nick56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 15h17   #2
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 499
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 499
Points : 9 679
Points : 9 679
Bonjour,

Algorithmiquement parlant, il n'est pas posible simplement de faire ce que tu demandes, parce que les calculs sur les dates sont très complexes.

Par contre, ce qui est simple, c'est de calculer la différence entre deux dates au format 'nombre de secondes depuis 1970', puis de calculer le nombre de jours que représente cette différence.
Je ne pense pas que cela soit faisable simplement en script, en revanche je sais qu'il existe des fonctions simples d'utilisation en C - N'hésites pas à poser des questions si tu as des soucis sur l'algorithme ou le développement en lui-même.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 16h05   #3
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 903
Points : 1 903
Citation:
Envoyé par ripat
J'ai eu récemment à faire des calculs sur date et heures dans un script bash. La commande GNU date est parfaite et peut beaucoup mais je n'ai pas trouvé comment faire des calcul de différences sur les dates ou heures. Du moins sans le recours de perl. Il y a une belle compilation ici:
http://www.unix.com/showthread.php?t=13785

Mais rien en bash pur. Je m'y suis donc mis.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/bin/bash
 
# Possibilités classiques de la commande GNU date (mais pas toujours bien documentées)
dte="2006-10-01 06:55:55"
echo $dte
 
# ajouter 2 jours, 1 heures et 5 secondes à la date donnée
date --date "$dte 2 days 1 hour 5 sec"
 
# soustraire 3 jours, 5 heures et 10 secondes à la date donnée
date --date "$dte 3 days 5 hours 10 sec ago"
 
# soustraire 3 jours, 5 heures et 10 secondes la date d'aujourd'hui
date --date "now 3 days 5 hours 10 sec ago"
 
 
# fonctions maison (pour la suite...)
 
date2stamp () {
date -u --date "$1" +%s
}
 
stamp2date (){
date -u --date "1970-01-01 $1 sec" "+%Y-%m-%d %T"
}
 
dateDiff (){
case $1 in
-s) sec=1; shift;;
-m) sec=60; shift;;
-h) sec=3600; shift;;
-d) sec=86400; shift;;
*) sec=86400;;
esac
dte1=$(date2stamp $1)
dte2=$(date2stamp $2)
diffSec=$((dte2-dte1))
if ((diffSec < 0)); then abs=-1; else abs=1; fi
echo $((diffSec/sec*abs))
}
 
# convertir un date en timestamp UNIX
stamp=$(date2stamp "2006-10-01 15:00")
echo $stamp
 
# convertir un timestamp en date/heure
stamp2date $stamp
 
# différence entre deux dates
# -s en sec. -m en min. -h en heures -d ou rien en jours
dateDiff -s "2006-10-01" "2006-10-32"
dateDiff -m "2006-10-01" "2006-10-32"
dateDiff -h "2006-10-01" "2006-10-32"
dateDiff -d "2006-10-01" "2006-10-32"
dateDiff "2006-10-01" "2006-10-32"
 
# nombre de secondes entre deux heures données
dateDiff -s "17:55" "23:15:07"
dateDiff -m "17:55" "23:15:07"
dateDiff -h "17:55" "23:15:07"
 
# nombre de minutes nous séparant de la fin de l'année
dateDiff -m "now" "2006-12-31 24:00:00"


Attention, le format %s de la commande date n'est pas standard. Il est donc possible que mes fonctions ne soient pas portables. A tester.
extrait de http://www.developpez.net/forums/arc...p/t-21165.html
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h05.


 
 
 
 
Partenaires

Hébergement Web