Skip to content

Commit 11c4bb2

Browse files
author
adrianbartyczak
committed
Remove function generateRandomDate()
Not a Unix-founded solution
1 parent acfe39b commit 11c4bb2

File tree

1 file changed

+0
-91
lines changed

1 file changed

+0
-91
lines changed

functions_scripts/programming_languages/bash/dateandtimeutils.bash

Lines changed: 0 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -26,94 +26,3 @@
2626
printf '%.0f' "$(secondsToMillisecondsDecimal "${1}")"
2727
}
2828

29-
# Random generation
30-
# --------------------------------------------
31-
# Generate a random date between two dates specified by year and optionally
32-
# month, day of month and hour and output as one of the following:
33-
# -A date in ISO-8601 format (e.g. 2004-04-25T16:18:13.489392193; default)
34-
# -A Unix timestamp in seconds
35-
# -A timestamp in the fomat [[CC]YY]MMDDhhmm[.ss]
36-
# Usage:
37-
# generateRandomDate <minimum/maximum date entities>
38-
# <minimum/maximum date entities> format:
39-
# yyyy(min),yyyy(max)[,MM(min),MM(max)[,dd(min),dd(max)[,hh(min),
40-
# hh(max)]]]
41-
# Examples:
42-
# generateRandomDate '1942,1956,09,10,03,08,19,22'
43-
# # output: "1945-10-06T21:33:42.730192851"
44-
# generateRandomDate -u '2005,2009,04,11,15,31'
45-
# # output: "1227236576"
46-
# Options:
47-
# -u return a Unix timestamp in seconds
48-
# -t return a timestamp in the fomat [[CC]YY]MMDDhhmm[.ss]
49-
# Note:
50-
# The time of each date entity is inclusive of the previous entity (e.g. if
51-
# the maximum hour is 15, the maximum time in hours and minutes is 15:59).
52-
generateRandomDate() {
53-
local OPT OPTIND OPTS
54-
while getopts :ut OPT; do OPTS+="${OPT}"; done
55-
shift $((OPTIND - 1))
56-
# redirect all output to >/dev/tty to print errors to the terminal when this
57-
# function is used in a subprocess
58-
exec 3>&1 4>&2; exec >/dev/tty 2>&1
59-
local regx='^[0-9]{1,4},[0-9]{1,4}(,[0-9]{1,2},[0-9]{1,2}(,[0-9]{1,2},[0-9]'
60-
regx+='{1,2}(,[0-9]{1,2},[0-9]{1,2})?)?)?$'
61-
if [[ ! "${1}" =~ ${regx} ]]; then
62-
local errMsg='generateRandomDate: first argument must be in the format'
63-
errMsg+=' yyyy(min),yyyy(max)[,\n MM(min),MM(max)[,dd(min),dd(max)[,'
64-
errMsg+='hh(min),hh(max)]]]'
65-
echo -e "${errMsg}" 1>&2
66-
return 1
67-
fi
68-
local vals=(${1//,/ })
69-
local ENT=()
70-
ENT+=($((10#"${vals[0]}")))
71-
ENT+=($((10#"${vals[1]}")))
72-
[ "${#vals[@]}" -gt 2 ] && ENT+=("${vals[2]}") || ENT+=('1')
73-
[ "${#vals[@]}" -gt 2 ] && ENT+=("${vals[3]}") || ENT+=('12')
74-
[ "${#vals[@]}" -gt 4 ] && ENT+=("${vals[4]}") || ENT+=('1')
75-
[ "${#vals[@]}" -gt 4 ] && ENT+=("${vals[5]}") || ENT+=('31')
76-
[ "${#vals[@]}" -gt 6 ] && ENT+=("${vals[6]}") || ENT+=('0')
77-
[ "${#vals[@]}" -gt 6 ] && ENT+=("${vals[7]}") || ENT+=('23')
78-
if [ "${ENT[2]}" -gt 12 ] || [ "${ENT[3]}" -gt 12 ] || [ "${ENT[2]}" \
79-
-eq 0 ] || [ "${ENT[3]}" -eq 0 ]; then
80-
echo 'generateRandomDate: MM(min) and MM(max) must be in the range 1 <='\
81-
'x <= 12' 1>&2
82-
return 1
83-
elif [ "${ENT[4]}" -gt 31 ] || [ "${ENT[5]}" -gt 31 ] || [ "${ENT[4]}" \
84-
-eq 0 ] || [ "${ENT[5]}" -eq 0 ]; then
85-
echo 'generateRandomDate: dd(min) and dd(max) must be in the range 1 <='\
86-
'x <= 31' 1>&2
87-
return 1
88-
elif [ "${ENT[6]}" -ge 24 ] || [ "${ENT[7]}" -ge 24 ]; then
89-
echo 'generateRandomDate: hh(min) and hh(max) must be less than 24' 1>&2
90-
return 1
91-
elif [ "${ENT[0]}" -gt "${ENT[1]}" ] || [ "${ENT[2]}" -gt "${ENT[3]}" ] || \
92-
[ "${ENT[4]}" -gt "${ENT[5]}" ] || [ "${ENT[6]}" -gt "${ENT[7]}" ]; then
93-
echo 'generateRandomDate: ranges must be yyyy(min)<=yyyy(max),'\
94-
'MM(min)<=MM(max), dd(min)<=dd(max), hh(min)<=hh(max)' 1>&2
95-
return 1
96-
fi
97-
local year="$(printf "%02d" "$(shuf -i "${ENT[0]}"-"${ENT[1]}" -n 1)")"
98-
local month="$(printf "%02d" "$(shuf -i "${ENT[2]}"-"${ENT[3]}" -n 1)")"
99-
local day="$(printf "%02d" "$(shuf -i "${ENT[4]}"-"${ENT[5]}" -n 1)")"
100-
case "${month}" in
101-
'02') [ "${day}" -gt 28 ] && day=28;;
102-
'04'|'06'|'09'|'11') [ "${day}" -gt 30 ] && day=30;;
103-
esac
104-
local hour="$(printf "%02d" "$(shuf -i "${ENT[6]}"-"${ENT[7]}" -n 1)")"
105-
local minute="$(printf "%02d" "$(shuf -i 0-59 -n 1)")"
106-
local second="$(printf "%02d" "$(shuf -i 0-59 -n 1)")"
107-
local nanosecond="$(printf "%09d" "$(shuf -i 0-999999999 -n 1)")"
108-
exec >&3 2>&4
109-
local iso8601Date="${year}-${month}-${day}T${hour}:${minute}:${second}"
110-
iso8601Date+=".${nanosecond}"
111-
if [ -n "${OPTS}" ] && [ -z "${OPTS##*u*}" ]; then
112-
date --utc --date="${iso8601Date}" +"%s"
113-
elif [ -n "${OPTS}" ] && [ -z "${OPTS##*t*}" ]; then
114-
echo "${year}${month}${day}${hour}${minute}.${second}"
115-
else
116-
echo "${iso8601Date}"
117-
fi
118-
}
119-

0 commit comments

Comments
 (0)