The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > UNIX for dummyer Spørgsmål & svar > Svar på ofte stillede spørgsmål > Tips og Tutorials
.
google unix.com



Tips og Tutorials Helpful articles fra vores brugere.

LinkBacks (?)
LinkBack til denne tråd: http://www.unix.com/tips-tutorials/31944-simple-date-time-calulation-bash.html
Indsendt af For Type Dato
yoga_sawant's Bookmarks on Delicious Denne tråd Refback 12-25-2008 09:43 AM

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Få dato og tidspunkt for seneste 1 time fra den aktuelle dato spch2o Shell Programmering og Scripting 5 08-29-2008 05:32 AM
Forarbejdning en logfil, baseret på dato / tid input og dato / tid på logfilen primp Shell Programmering og Scripting 4 03-16-2008 11:23 AM
en enkel måde at omdanne en dato i sekunder til normal dato Travian HP-UX 2 11-23-2006 12:25 PM
simple bash script til ftp? satnamx Shell Programmering og Scripting 1 04-21-2006 12:18 PM
Simpelt Bash Script xaphalanx Shell Programmering og Scripting 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 Søg denne tråd Karakter: Thread Rating: 1 votes, 4.00 average. Display Modes
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 10-08-2006
ripat ripat is offline Forum Advisor  
Registreret Bruger
  
 

Join Date: oktober 2006
Location: Belgien
Posts: 438
Simpelt dato og klokkeslæt calulation i Bash

Den GNU dato kommandoen i fuld af godbidder, men ikke når det kommer til at beregne en dato eller tidspunkt forskel. Her er hvad jeg kom op med efter at have kigget på mere end én løsning.

Koden skal være selvstændig forklare.

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"
Advarsel: ikke-standard format % s virker måske ikke på alle version af dato. Virker fint for mig GNU dato 5.2.1

Senest redigeret af ripat; 10-09-2006 kl 11:57 AM.. Årsag: Tilføjet nogle muligheder til funktionen DateDiff
 

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 12:29 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0