On Wed, Jul 4, 2012 at 3:17 PM, keeds <akee...@gmail.com> wrote: > Please excuse my ignorance. This is the first time I've played with > read-string and the reader... > > I was trying to serialise some clojure data structures to a database and > then read them back. > In the data I have some java.sql.Timestamp data. These get serialised as > #<Timestamp 2012-07-04 00:00:00.000> > When trying to read-string this data I get an Unreadable form > RuntimeException. >
Anything beginning with #< is unreadable. If you print a random Java object, then Clojure outputs it using this syntax, which will deliberately cause an error on read; eg: (prn (Object.)) However, it seems that you are using an old version of Clojure, because as-of Clojure 1.4, Dates, Timestamps, and Calendars now have a readable representation using the new reader. See https://github.com/clojure/clojure/blob/master/changes.md > user=> (pr-str (java.sql.Timestamp. (.getTime (java.util.Date.)))) > "#<Timestamp 2012-07-04 15:17:03.959>" > In Clojure 1.4 this will give you: #inst "2012-07-04T18:46:18.089000000-00:00" This form (the inst tag - for a date instant, followed by its string represntation), is readable with read-string. ... there is a gotcha though: When you read this back, you will, by default, get a java.util.Date, rather than a Timestamp. If you want instant literals to give you back a timestamp, then you need to rebind the *data-readers* variable to give you back timestamps instead of dates: (set! *data-readers* (assoc *data-readers* 'inst clojure.instant/read-instant-timestamp)) -- Dave -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en