Revision: 12321
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at March 10, 2009 17:25 by hackware
Initial Code
#!/bin/sh ############################################################################## # /.../_/sex2hms == Format seconds into "xx week(s) xx day(s) hh:mm:ss" # #----------------------------------------------------------------------------# #.........william.o.yates...spamware.at.tru2life.net...tru2life.info.........# #----------------------------------------------------------------------------# # and YES, sex2hms coulda, maybe shoulda be called sex2wdhms, but oh well... # #----------------------------------------------------------------------------# # original (for bash): http://codesnippets.joyent.com/tag/bash/3#post1936 # # # # #!/bin/sh # # #Convert seconds to h:m:s format # # # # [ -z ${1} ] && echo "Usage: $(basename $0) <seconds>" && exit||secs=${1} # # _hms() # # { # # local S=${1} # # ((h=S/3600)) # # ((m=S%3600/60)) # # ((s=S%60)) # # printf "%dh:%dm:%ds\n" $h $m $s # # } # # # # _hms ${secs} # # # #----------------------------------------------------------------------------# # # # 1 second = 1 second = "S=$(expr \( ${SEX} % 60 \))" # # 60 seconds = 1 minute = "M=$(expr \( ${SEX} % 3600 / 60 \))" # # 3,600 seconds = 1 hour = "H=$(expr \( ${SEX} % 86400 / 3600 \))" # # 86,400 seconds = 1 day = "D=$(expr \( ${SEX} % 604800 / 86400 \))" # # 604,800 seconds = 1 week = "W=$(expr \( ${SEX} / 604800 \))" # # # # Following are beyond scope of this script, but jus4giggles... # # # # 2,419,200 seconds = 1 month28 = "[ ${SEX} -gt 2419200 ] && calc_month"... # # 2,505,600 seconds = 1 month29 = "[ ${SEX} -gt 2505600 ] && calc_month"... # # 2,592,000 seconds = 1 month30 = "[ ${SEX} -gt 2592000 ] && calc_month"... # # 2,678,400 seconds = 1 month31 = "[ ${SEX} -gt 2678400 ] && calc_month"... # # 31,536,000 seconds = 1 year365 = "[ ${SEX} -gt 31536000 ] && calc_year"... # # 31,622,400 seconds = 1 year366 = "[ ${SEX} -gt 31622400 ] && calc_year"... # # # #----------------------------------------------------------------------------# # # # a heavy duty hand calculation for what correct answers should be: # # # # 999,999 / 604,800 = 1.6534375 == ( W=1 ) # # # # 1 * 604,800 = 604,800 == ( 1 week in seconds )(doh... :-) # # # # 999,999 - 604,800 = 395,199 == ( SEX - 1W ) # # # # 395,199 / 86,400 = 4.5740625 == ( D=4 ) # # # # 4 * 86,400 = 345,600 == ( 4 days in seconds ) # # # # 395,199 - 345,600 = 49,599 == ( SEX - 1W - 4D ) # # # # 49,599 / 3,600 = 13.7775 == ( H=13 ) # # # # 13 * 3,600 = 46,800 == ( 13 hours in seconds ) # # # # 49,599 - 46,800 = 2,799 == ( SEX - 1W - 4D - 13H ) # # # # 2,799 / 60 = 46.65 == ( M=46 ) # # # # 46 * 60 = 2,760 == ( SEX - 1W - 4D - 13H - 46M ) # # # # 2,799 - 2,760 = 39 == ( S=39 ) # # # # So, (finally!) with the following sex2hms runs, the answers are: # # (with your directory prefixed from where you run it from) # # # # /.../_/sex2hms: 9 seconds = 00 week 00 day 00:00:09 # # /.../_/sex2hms: 99 seconds = 00 week 00 day 00:01:39 # # /.../_/sex2hms: 999 seconds = 00 week 00 day 00:16:39 # # /.../_/sex2hms: 9999 seconds = 00 week 00 day 02:46:39 # # /.../_/sex2hms: 99999 seconds = 00 week 01 day 03:46:39 # # /.../_/sex2hms: 999999 seconds = 01 week 04 days 13:46:39 # # /.../_/sex2hms: 9999999 seconds = 16 weeks 03 days 17:46:39 # # /.../_/sex2hms: 99999999 seconds = 165 weeks 02 days 09:46:39 # # /.../_/sex2hms: 999999999 seconds = 1653 weeks 03 days 01:46:39 # #----------------------------------------------------------------------------# #.........william.o.yates...spamware.at.tru2life.net...tru2life.info.........# #============================================================================# #----------------------------------------------------------------------------- # hms() == convert seconds into hours:minutes:seconds (hh:mm:ss) format #----------------------------------------------------------------------------- hms() { local SEX=${1}; local HOUR=3600; local DAY=86400; local WEEK=604800; local DAZE="day"; local WEKZ="week"; W=$(expr \( ${SEX} / ${WEEK} \)) D=$(expr \( ${SEX} % ${WEEK} / ${DAY} \)) H=$(expr \( ${SEX} % ${DAY} / ${HOUR} \)) M=$(expr \( ${SEX} % ${HOUR} / 60 \)) S=$(expr \( ${SEX} % 60 \)) [ ${D} -gt 1 ] && DAZE="days" [ ${W} -gt 1 ] && WEKZ="weeks" #=========================================================================== # printf format [arguments ...] # '%s'=string, '%d'=decimal_number, '%02d'=0_padded_2_digit_decimal_number # character_escape_sequences: '\v'=vertical_tab, '\t'=tab, '\n'=newline #--------------------------------------------------------------------------- #-------------------SEX-----------W--WEKZ--D--DAZE--H----M----S------------- printf "\v\t${0}: %d seconds = %02d %s %02d %s %02d:%02d:%02d\v\n" \ ${SEX} ${W} ${WEKZ} ${D} ${DAZE} ${H} ${M} ${S} echo -e "\v\tSEX=${SEX}, W=${W}, WEKZ=${WEKZ}, D=${D}, DAZE=${DAZE}, \ H=${H}, M=${M}, S=${S} \v" } #============================================================================= # [ -z STRING ] == True if the length of STRING is zero. #----------------------------------------------------------------------------- [ -z ${1} ]&&echo -e "\n\tUsage: $(basename ${0}) <seconds>\n"&&exit||hms ${1} ##############################################################################
Initial URL
Initial Description
Bourne Shell Script (created on a FreeBSD_7.1-RELEASE system :-)
Initial Title
# /.../_/sex2hms == Format seconds into
Initial Tags
unix, osx, linux
Initial Language
Other