The UNIX and Linux Forums  


Go Back   Les systèmes UNIX et Linux Forums > Top Forums > UNIX pour les nuls Questions et réponses > Réponses aux questions fréquemment posées > Conseils et Didacticiels
.
google unix.com



Conseils et Didacticiels Des articles de nos utilisateurs.

LinkBacks (?)
LinkBack à ce Thread: http://www.unix.com/tips-tutorials/31944-simple-date-time-calulation-bash.html
Posted By Pour Type Date
yoga_sawant de signets sur Delicious Ce fil Refback 12-25-2008 09:43 AM

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
Obtenir la date et le temps passé à 1 heure de la date courante spch2o De programmation et de script Shell 5 08-29-2008 05:32 AM
Traitement d'un fichier journal en fonction de la date et l'heure d'entrée et la date / heure sur le fichier de log primp De programmation et de script Shell 4 03-16-2008 11:23 AM
un moyen simple de convertir une date en secondes à la date normale travian HP-UX 2 11-23-2006 12:25 PM
simple script bash pour ftp? satnamx De programmation et de script Shell 1 04-21-2006 12:18 PM
Simple Script Bash xaphalanx De programmation et de script Shell 3 12-21-2005 03:54 PM

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack (1) Thread Tools Recherche sur ce Thread Rating: Thread Rating: 1 votes, 4.00 average. Modes d'affichage
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 10-08-2006
ripat ripat is offline Forum Advisor  
Registered User
  
 

Join Date: Oct 2006
Lieu: Belgique
Messages: 439
Simple date et l'heure de calcul en BASH

Le GNU date de commande dans le plein de bonnes choses, mais pas quand il s'agit de calculer une date ou une heure de différence. Voici ce que je suis venu après avoir examiné avec plus d'une solution.

Code doit être autonome expliquer.


Code:
#!/bin/bash

date2stamp () {
    date --utc --date "$1" +%s
}

stamp2date (){
    date --utc --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))
}

# USAGE # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 

# convert a date into a UNIX timestamp
    stamp=$(date2stamp "2006-10-01 15:00")
    echo $stamp

# from timestamp to date
    stamp2date $stamp

# calculate the number of days between 2 dates
    # -s in sec. | -m in min. | -h in hours  | -d in days (default)
    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"

# number of seconds between two times
    dateDiff -s "17:55" "23:15:07"
    dateDiff -m "17:55" "23:15:07"
    dateDiff -h "17:55" "23:15:07"

# number of minutes from now until the end of the year
    dateDiff -m "now" "2006-12-31 24:00:00 CEST"

# Other standard goodies from GNU date not too well documented in the man pages
    # assign a value to the variable dte for the examples below
    dte="2006-10-01 06:55:55"
    echo $dte

    # add 2 days, one hour and 5 sec to any date
    date --date "$dte  2 days 1 hour 5 sec"

    # substract from any date
    date --date "$dte 3 days 5 hours 10 sec ago"
    date --date "$dte -3 days -5 hours -10 sec"

    # or any mix of +/-. What will be the date in 3 months less 5 days
    date --date "now +3 months -5 days"

    # time conversions into ISO-8601 format (RFC-3339 internet recommended format)
    date --date "sun oct 1 5:45:02PM" +%FT%T%z
    date --iso-8601=seconds --date "sun oct 1 5:45:02PM"
    date --iso-8601=minutes

    # time conversions into RFC-822 format
    date --rfc-822 --date "sun oct 1 5:45:02PM"

Warning: le non-standard % s pourrait ne pas fonctionner sur toutes les version de date. Fonctionne très bien de mon GNU 5.2.1 Date

Dernière édition par ripat; au 10.09.2006 11:57 AM.. Motif: Ajout de quelques options de la fonction DateDiff
 

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 01:49 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0