2016-03-21 4 views
0

Ich habe Probleme, den Interop zwischen java.util.Date und clj-time.Clojure clj-time: parse lokale Zeichenkette

ich erste Rohdaten haben, die eine Instanz von java.util.Date ist, lassen Sie uns Tag:

(def date (new java.util.util.Date)) 

ich in eine CLJ Zeitobjekt aktiviert werden soll, damit ich tun:

(def st-date (.toString date)) 

Output:

"Mon Mar 21 16:39:23 CET 2016" 

definiere ich einen Formatierer

(def date-formatter (tif/formatter "EEE MMM dd HH:mm:ss zzz yyyy")) 

Alles ist hier denke ich.

Ich versuche, so

(tif/parse order-date-formatter st-date) 

Ich habe eine Ausnahme, die mir das Format sagen ist nicht richtig.

Ich versuchte

(tif/unparse order-date-formatter (tic/now)) 

Und ich habe

"lun. mars 21 15:50:29 UTC 2016" 

, die die gleiche Datetime als Java-String ist aber in Französisch (meine Sprache) mit UTC

den Code für Test Wrapping

(defn today-date-to-clj [] 
    (let [st-date (.toString (new java.util.util.Date)) 
     date-formatter (tif/formatter "EEE MMM dd HH:mm:ss zzz yyyy")] 
    (tif/parse date-formatter st-date))) 

Ich finde, dass der Formatierer nicht auf der Zeichenkette funktioniert, weil es nicht die gleiche Lokalisierung ist, habe ich recht? Wie man es ändert?

Danke für die Hilfe!

EDIT

Jemand gab mir eine viel bessere Antwort, aber das funktionierte fast für Neugierige (Problem bei "CET 2016", sondern arbeitet für unparse)

(def uni-formatter (tif/with-locale (tif/with-zone order-date-formatter (DateTimeZone/forID "Europe/Paris")) java.util.Locale/US)) 

Antwort

1

Statt String als der Verwendung Zwischendatumsdarstellung sollten Sie eine direkte Konvertierung verwenden:

(clj-time.coerce/from-date (java.util.Date.))

+0

Ahah dank ich eine komplizierte Antwort gesucht, nicht sehen es:

Sie können Ihre java.util.Date Objekt from-date oder from-date-time einen org.joda.time.DateTime und dann wenden Sie es auf Ihrem benutzerdefinierten Formatierer übergeben! –

1

Sehen Sie sich die Funktionen coerce von clj-time genauer an.

(require '[clj-time 
      [coerce :as c] 
      [format :as f]]) 

(->> (java.util.Date.) 
    (c/to-date-time) 
    (f/unparse date-formatter)) 
+0

Thnaks auch für die Antwort! –