Hi,
I am just starting to learn Clojure by writing a small library. I came
across a situation in which I have to parse a String for getting a Date. Now
the string can be in one of the three formats. So I wrote this functions to
parse it:
(def #^{:private true :tag SimpleDateFormat} full-date-format
(doto (SimpleDateFormat. "EEE, dd MMMM yyyy HH:mm:ss +0000")
(.setTimeZone (TimeZone/getTimeZone "GMT"))))
(def #^{:private true :tag SimpleDateFormat} date-format-wo-tz
(doto (SimpleDateFormat. "EEE, dd MMMM yyyy HH:mm:ss")
(.setTimeZone (TimeZone/getTimeZone "GMT"))))
(def #^{:private true :tag SimpleDateFormat} short-date-format-wo-tz
(doto (SimpleDateFormat. "dd MMM yyyy, HH:mm")
(.setTimeZone (TimeZone/getTimeZone "GMT"))))
(defn- parse-date [date-str]
(if (some #(% date-str) [nil? blank?])
nil
(let [clean-date-str (trim date-str)]
(try
(.parse full-date-format clean-date-str)
(catch java.text.ParseException e
(try
(.parse date-format-wo-tz clean-date-str)
(catch java.text.ParseException e
(.parse short-date-format-wo-tz clean-date-str))))))))
I can't help but think that there must be a better way to do the same
without so many nested try catch blocks. If this were Java, I could have
looped over all the date formats and used an explicit return in the try
block and continue in catch block. I don't understand how to do explicit
return in Clojure.
Also as the number of formats grows, I'll have to add more nested try catch
blocks. Please suggest a cleaner way to do this.
Regards,
Abhinav
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en