2016-05-30 6 views
1

Для данного custom-formatter, parse отказывается от определенных значений месяца.parse не принимает все названия месяцев аббревиатура

(require '[clj-time.core :as t] 
'[clj-time.format :as f]) 


(let [custom-formatter (f/formatter "dd MMM yyyy")] 
(f/parse custom-formatter "27 mar 2010") 
(f/parse custom-formatter "27 dec 2010")) 

Первый parse возвращает ожидаемый результат, #object[org.joda.time.DateTime 0x62a9d176 "2010-03-27T00:00:00.000Z"], в то время как второй возвращается Actual: java.lang.IllegalArgumentException: Invalid format: "27 dec 2010" is malformed at "dec 2010".

Я не могу понять это поведение. Что может вызвать эту проблему?

Спасибо за помощь.

обновление

Вот мой project.clj файл

:dependencies [[org.clojure/clojure "1.7.0"]                                                         
       [twitter-api "0.7.8"]                                                           
       [cheshire "5.6.1"]                                                            
       [clojure-csv/clojure-csv "2.0.1"]                                                        
       [org.postgresql/postgresql "9.4-1206-jdbc42"]                                                     
       [com.jolbox/bonecp "0.8.0.RELEASE"]                                                       
       [org.clojure/java.jdbc "0.6.1"]                                                        
       [java-jdbc/dsl "0.1.0"]                                                          
       [org.slf4j/slf4j-nop "1.7.21"]                                                         
       [clj-time "0.11.0"]                                                           
       ]            
+0

Ошибка, которая производится не кажется, что нужно сделать с приведенным вами примером. Похоже, вы пытаетесь разобрать «27 октября 2010», который имеет дополнительное пространство. – kongeor

+0

@ kongeor вы правы. Я испортил свою копию/вставку. Теперь я обновил свой пост. И ошибка, которую я описываю, действительно имеет место при правильном форматировании. – user3639782

+0

Странно. Ваш код работает для меня. Обратите внимание, что у вас есть дополнительная закрывающая скобка. Если вы выбросите этот пример кода в 'REPL', он сломается? Какие версии вы используете? – kongeor

ответ

4

Вы, вероятно, необходимо указать локаль для форматировщиком. Вы можете проверить свой локали по умолчанию с:

user=> (java.util.Locale/getDefault) 
#object[java.util.Locale 0x4713d9a5 "en_US"] 

Смотрите результаты для различных районов (в том числе ошибки вы видите):

user=> (require '[clj-time.core :as t] 
    #_=> '[clj-time.format :as f]) 
nil 

user=> (let [custom-formatter (f/with-locale 
           (f/formatter "dd MMM yyyy") 
           java.util.Locale/ENGLISH)] 
     (f/parse custom-formatter "27 mar 2010")) 
#object[org.joda.time.DateTime 0x3cfceae6 "2010-03-27T00:00:00.000Z"] 

user=> (let [custom-formatter (f/with-locale 
           (f/formatter "dd MMM yyyy") 
           java.util.Locale/ITALY)] 
     (f/parse custom-formatter "27 mar 2010")) 
#object[org.joda.time.DateTime 0x4f5e9955 "2010-03-27T00:00:00.000Z"] 

user=> (let [custom-formatter (f/with-locale 
           (f/formatter "dd MMM yyyy") 
           java.util.Locale/CHINA)] 
     (f/parse custom-formatter "27 mar 2010")) 

IllegalArgumentException Invalid format: "27 mar 2010" is malformed at "mar 2010" org.joda.time.format.DateTimeFormatter.parseDateTime (DateTimeFormatter.java:899) 

 Смежные вопросы

  • Нет связанных вопросов^_^