How to change jdbc return types?

I decided to go with spec-tools (which included changing the result-set-read-column), mostly for educational purposes. While the code seems tolerably clear to me, i have a nagging suspicion I’m missing something in how I’m putting it together. There is some redundancy in that I use a try-catch to determine whether it is formattable with the date formatter, and then I wonder if I’m missing a more obvious way than to do an (if (valid?)) with the spec. Any recommendations to more idiomatically or cleanly do this are welcome (though, to be clear, this one is working out alright). This is essentially my first time attempting to apply Spec.

;; in my db namespace
(extend-protocol jdbc/IResultSetReadColumn
  Date
  (result-set-read-column [v _ _] (-> v t/to-local-date))

  Timestamp
  (result-set-read-column [v _ _] (-> v t/to-localtime))

  Time
  (result-set-read-column [v _ _] (-> v t/to-localtime))

  Array
  (result-set-read-column [v _ _] (vec (.getArray v)))

  String
  (result-set-read-column [v _ _] (t/maybe-as-date v)))

;;;;;;;;;;;;;;;;;;;;;;
;; in my `t` namespace
(defn curr-academic-date-string?
  "Determine whether a string is of the format needed to be a currAcademic whichdate"
  [s]
  (try 
    (do (time/local-date FORMAT s)
        true)
    (catch Exception e false)))

(s/def ::date
  (st/spec
   {:spec #(or (time/local-date? %) (curr-academic-date-string? %))
    :description "Is a local-date or a string like the DB uses to indicate a date"
    :decode/string #(to-local-date %2)
    :encode/string #(localdate-to-string %2)}))

(defn maybe-as-date
  "Transform a curracademic string to a date, or return any other string"
  [s]
  (if (s/valid? ::date s)
    (st/decode ::date s st/string-transformer)
    s))